可能性のある複製:
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が必要です。ありがとう。
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();
更新
あなたが言った以下:
申し訳ありませんが、以前の日付形式を予測することはできません。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を引く必要があります。
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");
これを試して:
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')
変更日/月の位置を置き換えます。