2011-01-07 12 views
10

Javascriptで新しいDate()関数を使用する際に問題が発生しています。 Safariは私に「無効な日付」メッセージを与えています。SafariでJavascriptを使用した新しい日付()

jsbinという短い例を作成しました。

これは他のすべてのブラウザで動作するようですが、Safariでは動作しません。どのように私は入力から値を取ることができます(2011年1月3日など)と日付オブジェクトにそれを有効にしながら、それはSafariで正常に動作している上に任意のアイデア?

多くの感謝!

答えて

41

JavaScriptの日付解析動作は、実装依存のです。最近、ISO8601形式がECMAScript 5th Edition仕様に追加されましたが、これはまだすべての実装でサポートされていません。

私は例えば、手動でそれを解析するために、あなたをお勧めします:基本的に上記の機能は、各日付の部分と一致し、Dateコンストラクタを使用しています

function parseDate(input) { 
    var parts = input.match(/(\d+)/g); 
    return new Date(parts[0], parts[1]-1, parts[2]); 
} 

parseDate('2011-01-03'); // Mon Jan 03 2011 00:00:00 

は、日付オブジェクトを構築するために、注意して ヶ月引数 (0 = 1月、1月= 2月、... 11 = 12月)を0ベースにする必要があります。

+0

これでした。説明をありがとう。 – Dodinas

1

@ CMSのソリューションはおそらく優れていますが、Date.parse('2011-01-13')を使用すると、すばやく実用的なソリューションであることがわかりました。

+2

Safari(5.1.3)では動作しないようですが、戻り値として 'NaN'を取得しています。 –

+0

右。 'Date.parse'は実装固有のようです。 – n0nick

0

csnoverはGitHubの上で利用できるいくつかの進歩的なISO 8601日付強化コードを持っている:Safariのチームは、より完全なES5の実装に向けて努力しながら、彼のコードを含む https://github.com/csnover/js-iso8601/blob/master/iso8601.js

は一時的な修正を提供する必要があります。

+0

このコードはSafariで動作しません –

2

私はhttp://datejs.com/ から ダウンロードdate.jsを試みた簡単な解決策は、あなたのファイルに

を含め、その後 VAR日= Date.parse( '1970年1月12日午前0時00分00秒'); var formattedDate = date.toString( 'yyyy-MM-dd');

関連する問題