2017-10-10 14 views
2

JavaScriptを使用すると、UTC以外の日付を使用して1 UTCの日を追加し、時間をゼロにしてからISO文字列に変換するにはどうすればよいですか?javascriptの日付に1 UTC dayを追加するには?


new Date().toISOString() 

2017-10-10T16:00:49.915Z


理想UTC日付ストリング

2017-10-11T00:00: 00.000Z

+0

そう...あなたは7h59m10s085追加していますか?あなたは次の日に切り上げることを意味しますか? – spectras

+0

これは、問題の2番目の部分 'setUTCHours(0,0,0,0)' https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHoursの助けとなります –

答えて

2

以下、ミリ秒単位で日付を取得します。ミリ秒単位で1日を加算します。 それから、ミリ秒単位で1日で割り、切り捨てを行い、1ミリ秒単位でもう一度倍数にします。

var d = new Date('2017-10-10T16:00:49.915Z'); 
 

 
function nextDayUTC(d) { 
 
    var aDay = 1440 * 60 * 1000; 
 
    var d2 = new Date(Math.trunc((d.getTime() + aDay)/aDay)*aDay); 
 
    return d2; 
 
} 
 

 
function nextDayLocal(d) { 
 
    //basically set to start of the day 
 
    //add 36 hrs, this pretty much ensures next day 
 
    //add then reset the hours back to 0 
 
    var hr36 = 36 * 60 * 60 * 1000; 
 
    var d2 = new Date(d); 
 
    d2.setHours(0,0,0,0); 
 
    d2.setTime(d2.getTime() + hr36); 
 
    d2.setHours(0,0,0,0); 
 
    return d2; 
 
} 
 

 
console.log(d) 
 
console.log("Next Day UTC"); 
 
console.log(nextDayUTC(d).toISOString()); 
 
console.log("Next Day Local"); 
 
console.log(nextDayLocal(d).toString());

+0

これは、サマータイムが開始または終了する前の最後の日である場合を正しく処理しますか? – cloudfeet

+1

はい、私がやっていることはすべてUTCに基づいているからです。夏時間の節約はレンダリングの問題です。 UTC時間は一定です。 – Keith

+0

ああ、はい!申し訳ありませんが、私は何とかロケール固有ではなくISO形式にレンダリングしていたことを見落としました。 :) – cloudfeet

関連する問題