web-dev-qa-db-ja.com

JavaScriptまたはjQueryを使用して「dd / mm / yyyy」または「dd-mm-yyyy」または「dd-mmm-yyyy」形式の日付文字列を解析する方法

可能性のある複製:
DD/MM/YYYY(米国以外の形式の日付)を許可するためにJavaScriptのDate.parseを拡張しますか?
dd-mm-yyyy文字列を日付に変換

たとえば、テキストボックスに日付を入力しました:05/09/1985、そしてそれを05-Sep-1985(dd-MMM-yyyy)形式。どうすればこれを達成できますか?ソース形式はdd-mm-yyyyまたはdd/mm/yyyyまたはdd-mmm-yyyy形式であることに注意してください。

コードスニペット:

 function GetDateFormat(controlName) {
        if ($('#' + controlName).val() != "") {      
            var d1 = Date.parse($('#' + controlName).val());
            if (d1 == null) {
                alert('Date Invalid.');
                $('#' + controlName).val("");
            }
                var array = d1.toString('dd-MMM-yyyy');
                $('#' + controlName).val(array);
        }
    }

このコードは09-May-1985を返しますが、05-Sep-1985が必要です。ありがとう。

41

http://momentjs.com/ のようなヘルパーライブラリを使用することをお勧めします。

その後、次のようなことができます:

var day = moment("12-25-1995", "MM-DD-YYYY");

または

var day = moment("25/12/1995", "DD/MM/YYYY");

その後、日付で動作します

day.add('days', 7)

そして、ネイティブのjavascriptの日付を取得する

day.toDate();
58
user1372449

更新

あなたが言った以下:

申し訳ありませんが、以前の日付形式を予測することはできません。dd-mm-yyyyまたはdd/mm/yyyyまたはdd-mmm-yyyy形式である必要があります。

completelyは質問を変更します。形式を制御できない場合は、はるかに複雑になります。 JavaScriptには、日付形式を指定できるものは何も組み込まれていません。公式には、JavaScriptでサポートされている唯一の日付形式は ISO-8601の簡易バージョンyyyy-mm-ddですが、実際にはほとんどすべてのブラウザーがyyyy/mm/ddもサポートしています。しかし、それ以外は、自分でコードを記述するか、(そしてこれがはるかに理にかなっている)優れたライブラリを使用する必要があります。おそらく moment.js または DateJS のようなライブラリを使用するでしょう(ただし、DateJSは何年もメンテナンスされていません)。


元の答え

形式がalwaysdd/mm/yyyyの場合、これは簡単です。

var parts = str.split("/");
var dt = new Date(parseInt(parts[2], 10),
                  parseInt(parts[1], 10) - 1,
                  parseInt(parts[0], 10));

splitは、指定された区切り文字で文字列を分割します。次に、parseIntを使用して文字列を数値に変換し、new Dateコンストラクターを使用して、これらの部分からDateを構築します。3番目の部分は年、2番目の部分は月、そしてその日の最初の部分。 Dateはゼロベースの月番号を使用するため、月番号から1を引く必要があります。

41
T.J. Crowder

Date.parse は特定の形式のみを認識し、入力形式を伝えるオプションはありません。この場合、入力はmm/dd/yyyyの形式であると考えられるため、結果は間違っています。

これを修正するには、入力を自分で解析(たとえば String.split を使用)してから 手動で構成Dateオブジェクトを使用するか、より完全な機能を使用する必要があります datejs などのライブラリ。

手動解析の例:

var input = $('#' + controlName).val();
var parts = str.split("/");
var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));

Date.jsを使用した例:

var input = $('#' + controlName).val();
var d1 = Date.parseExact(input, "d/M/yyyy");
9
Jon

これを試して:

 function GetDateFormat(controlName) {
        if ($('#' + controlName).val() != "") {      
            var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1'));
            if (d1 == null) {
                alert('Date Invalid.');
                $('#' + controlName).val("");
            }
                var array = d1.toString('dd-MMM-yyyy');
                $('#' + controlName).val(array);
        }
    }

RegExpは.replace(/([0-9]+)\/([0-9]+)/,'$2/$1')変更日/月の位置を置き換えます。

3
Paulo H.