2010-12-01 4 views
15

これは私のコードです:私は日に上記の文字列を変換したいについてJavaScriptの新しい日付()メソッドとDate.parse()

var exampleDate='23-12-2010 23:12:00'; 
    var date=new Date(exampleDate);//returns invalid Date 
    var date1=Date.parse(exampleDate);//returns NAN 

。だから私は上記のコードを書いています。

このコードはIEOperaに細かい実行されているが、date変数が無効な日付とdate1は私が何をすべき、mozilla FirefoxNANを返して、私を返していますか?

答えて

6

上記のフォーマットは、IEとChromeでのみサポートされています。

他の形式で試してみてください。いくつかのフォーマットがあり、サポートするブラウザがあります。

<script type="text/javascript"> 

//var dateString = "03/20/2008"; // mm/dd/yyyy [IE, FF] 

var dateString = "2008/03/20"; // yyyy/mm/dd [IE, FF] 
// var dateString = "03-20-2008"; // mm-dd-yyyy [IE, Chrome] 
// var dateString = "March 20, 2008"; // mmmm dd, yyyy [IE, FF] 
// var dateString = "Mar 20, 2008"; // mmm dd, yyyy [IE, FF] 

// Initalize the Date object by passing the date string variable 
var myDate = new Date(dateString); 
alert(myDate); 
</script> 
+0

yyyy/MM/ddもChromeで動作します...ソリューションをありがとうございます! – OverMars

+2

これは受け入れられる回答ではありません。casablancasの回答を参照してください。 – Toskan

2

JavaScriptは以下のdateStringsから少なくとも変換をサポートする必要があります

* yyyy/MM/dd 
* MM/dd/yyyy 
* MMMM dd, yyyy 
* MMM dd, yyyy 

はして試してみてください。

var exampleDate='12/23/2010 23:12:00'; 
    var date = new Date(exampleDate); 
25

あなたの例では、文字列は、ブラウザによって認識標準フォーマットのいずれかではありません。

YYYY

YYYY-MMYYYY-MM-DDTHH:mm:ss.sssZ

このフォーマットは、日付のみの形態を含む:

フォーマットは以下の通りである:ECMAScript仕様は、唯一の標準フォーマットを解析することができるようにブラウザが必要

YYYY-MM-DD

また添付オフセット任意の時間帯との時間のみの形態を含む:

も含まTHH:mm

THH:mm:ss

THH:mm:ss.sss

は、任意の組み合わせであってもよい「日付時刻」であります上記。

文字列がその形式に準拠していない場合、関数は 実装固有のヒューリスティックまたは実装固有の日付形式に戻されます。認識できない文字列または日付String が不正な要素値を含む場合、Date.parseはNaNを返します。

あなたの例では、2010-12-23T23:12:00を使用して動作することが保証されている唯一の文字列です。実際には、ほとんどのブラウザでもDD Month YYYYまたはMonth DD, YYYYという形式の日付が使用できるため、23 Dec 2010Dec 23, 2010のような文字列も使用できます。

+0

が、それはこの答えが書かれた時点では私の問題 – Chitresh

+0

をresloveために私を助けるのです感謝、日付文字列の解析は実装に依存し、したがって、**まったく**文字列はありませんでした「働くことが保証されています」。それ以来、タイムゾーンのないISO 8601ロングフォーマットの文字列は、ES5(Firefoxなど)とECMA 2015(ChromeやSafariなど)と一貫性のあるブラウザでローカルのUTCとして解析する必要がありました。 NaNを返すIE8、UTCとして扱うFirefox 40、現地のChrome 44など、現在使用中のブラウザ(2015)では3つすべての動作を見ることができます。だから、まだ "**働くことが保証されている**" **文字列はありません。 – RobG

4

それからなど、日付要素と日付のコンストラクタを呼び出す正規表現を使って手動でそれを解析できます。

var parseDate = function(s) { 
    var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/; 
    var m = re.exec(s); 
    return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null; 
}; 
var dateStr = '23-12-2010 23:12:00'; 
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800 
1

使用datejsと、このコード:

var exampleDate='23-12-2010 23:12:00'; 
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss'); 

myDate正しく構築されたDateオブジェクトである必要があります。

0

ただ、この形式で使用します。

var exampleDate='2010-12-23 23:12:00';