2016-09-05 8 views
0

日付オブジェクトをバックエンドデータベースから文字列に変換してビューに表示しようとしていますが、変換すると結果は常に1日遅れになります。JavaScriptの日付オブジェクトは常に1日遅れです

コード:設け

date = this.props.date; 

d = new Date(date) 
    options = { 
     month: "long", weekday: "long", year: "numeric", 
     day: "numeric" 
    }; 

    dateStr = d.toLocaleDateString("en-us",options) 

EDIT例:バックエンド構造に関して は、日付は、単純なHTML日付ピッカーフォームをデータベースに挿入されます。

"2016-10-01" 

私は上記のコードを使用すると、それはなる:

"Friday, September 30, 2016" 
+0

バックエンドオブジェクトはどのように見えますか? – Huntro

+0

this.props.dateのサンプル値と取得した(誤った)結果を入力してください。 –

+1

おそらくタイムゾーンの問題です。現地のタイムゾーンを確認してください。 ISO日付との比較(date.toISOString()) –

答えて

0

と仮定すると、

現在、this.props.dateは、ビュー上でレンダリングされた場合には、このような何かをレンダリングしますバックエンド日付はUTC(具体的にはISO8601)で表示され、表示される日付はen-us言語地域のUTCになります。日付を想定し

var date = "2016-10-01"; 
 
var parts = date.split('-'); 
 
parts[1] -= 1; 
 
var d = new Date(Date.UTC.apply(null, parts)); 
 
options = { 
 
    month: "long", 
 
    weekday: "long", 
 
    year: "numeric", 
 
    day: "numeric", 
 
    timeZone: 'UTC' 
 
}; 
 

 
document.getElementById('out').textContent = d.toLocaleDateString("en-us", options);
<pre id="out"></pre>

はUTCで、Dateオブジェクトは、(一部の古いバージョンではない)が正しくISO8601を処理し、その後、あなたは、日付の解析に建てに頼ることができます。

var date = "2016-10-01"; 
 
var d = new Date(date); 
 
options = { 
 
    month: "long", 
 
    weekday: "long", 
 
    year: "numeric", 
 
    day: "numeric", 
 
    timeZone: 'UTC' 
 
}; 
 

 
document.getElementById('out').textContent = d.toLocaleDateString("en-us", options);
<pre id="out"></pre>

だから私が行っているすべては、明示的にそれ以外の場合は、ランタイムのデフォルトのタイムゾーンを使用している、UTCように出力を設定されています。 toLocaleDateStringはまだ初期段階であり、ISO8601の解析と同様にブラウザによって異なる可能性があります。

+0

"en-us"はロケールではなく言語です。 ;-) * toLocaleDateString *は完全にインプリメンテーションに依存し、この回答がある[* EMCA-402 Intlオブジェクト*](http://www.ecma-international.org/publications/standards/Ecma-402.htm)をサポートしています依存しているのは[* ubiquitous *](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl)です。 – RobG

+0

実際には言語と地域ですが、CLDRはこれをドキュメント内のロケールと呼びますが、ロケールという単語は厳密には正しいとは言えませんが、しばしば使用されます。しかし、私は少しそれほど議論の余地がないように言葉に変えることができます。 :) – Xotic750

+0

個人的なグリップのビット、そのような設定はちょうど好みです。私はなぜ彼らが "文化"または "ロケール"と呼ばれる必要があるのか​​わかりませんが、どちらもこの文脈では誤った言い方です。 :-( – RobG

関連する問題