2017-10-10 136 views
2

使用javascript,如何取得一個非UTC日期,添加1個UTC日期,零時間時間(s),然後將其轉換爲ISO字符串?如何將1個UTC日添加到javascript日期?


new Date().toISOString() 

2017-10-10T16:00:49.915Z


期望UTC Datestring

2017-10-11T00:00: 00.000Z

+0

所以...你已經添加7h59m10s085?你的意思是第二天結束? – spectras

+0

這可以幫助你的問題的第二部分'setUTCHours(0,0,0,0)'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours –

回答

2

下面我以毫秒爲單位獲得日期,以毫秒爲單位添加一整天。 然後我用毫秒分割一天,截斷,然後再以毫秒爲單位重複一次。

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