2016-07-13 22 views
0

からのgetDate()間違った値が、私は日付のインスタンスのISO 8614フォーマットを解析することは簡単なはず、フォーマットISO 8601であるAJAX日付、を介してクライアントに提供するデータベースを持っていますが、何らかの理由でdate.getDate()提供日の1日早く返し、私は今私はちょうど1日:ISO 8601の日付インスタンス

コードによって価値を高めるために、日付メソッドを呼び出す関数を作るためにそうなぜ起こるか分からないことは簡単です:

function getFullDate(ISO){ 
    // ISO = 
    var date = new Date(ISO); 

    return [ 
     date.getFullYear(), 
     date.getMonth() < 10 ? "0" + date.getMonth() : date.getMonth(), 
     date.getDate() < 10 ? "0" + (date.getDate() + 1) : (date.getDate() + 1) //Get date returns 1 day early so raise by 1 
    ].join("-"); 
} 

console.log(getFullDate("2016-07-19T00:00:00.000Z")); // 2016-07-19 

コードに何も問題はありません。なぜこれが起こるのか知りたいだけですISO 8601の形式

+2

getUTCFullYear()ようで始まるメソッドを使用しますが、日のヶ月などを取得するために、現地時間のAPIを使用していますUTC時刻はその日の深夜です。ヨーロッパの西側にいる場合は、そのコードを実行すると前日が表示されます。 – Pointy

答えて

1

あなたはUTC時間で日付を取得していますが、マシンが設定されている時間帯に表示される方法を使用しています。

チェックアウト日docsとあなたのISOの日付がUTC時刻として解釈されgetUTC...

+0

これは、時刻が真夜中の「00:00:00」に設定されているために発生します。私はすべての日付メソッドを知っていませんでしたが、これを念頭に置いておきます。 – nosthertus

+0

@nosthertus - 真夜中ではありません。午前0時からX時間前の任意の時間 - Xはあなたのタイムゾーンの差です(つまり、-0700 - 20:00:00は翌日の午前3時と表示されます) – cyberwombat

関連する問題