簡體   English   中英

如何以YYYY-MM-DD格式在JS中獲取第二天的日期?

[英]How do I get the next day's date in JS in YYYY-MM-DD format?

似乎是一個簡單的問題,但是 JS 中的所有時區來龍去脈都讓我很頭疼。

基本上,如果我有如下日期:

2018-04-06

我希望能夠獲得第二天的日期:

2018-04-07

我在 SO 上找到了以下代碼片段來執行此操作(有點):

var date = new Date('2018-04-06');
date.setDate(date + 1);

問題是我用調整后的時區獲取日期,因為我在美國東部時區,它給我那個日期減去五個小時,這實際上是我開始的同一天。

我已經通過無數 SO 帖子試圖找到這個看似簡單的問題的答案,但是對於任何給定的日期,無論用戶所在的時區如何,我如何以 YYYY-MM-DD 格式獲取第二天的日期? 謝謝你。

格式為 YYYY-MM-DD 的字符串被解析為 UTC,因此在這種情況下,請使用 UTC 執行所有操作(請參閱為什么 Date.parse 給出不正確的結果?以及如何將 1 天添加到當前日期? )。

toISOString方法將返回所需格式的字符串,只需修剪多余的時間部分,例如

 let s = '2018-04-06'; let d = new Date(s); d.setUTCDate(d.getUTCDate() + 1); console.log(d.toISOString().substr(0,10));

您是否嘗試過 UTC 日期?

 var date = new Date('2018-04-06'); console.log(date.toUTCString()); date.setDate(date.getDate() + 1); console.log(date.toUTCString());

正如@chrisbyte 所建議的那樣,您是否嘗試過使用toUTCString方法而不是toString()方法?

提醒一下,例如,當您在控制台中顯示date對象時, toString是默認使用的

我認為您假設的“問題”只是對Date.toString()方法行為方式的不完整理解:此方法似乎返回表示Date對象的字符串,似乎使用此處提到的時區(在第一個示例中的評論中) )

這是我的片段以了解更多信息:

 const originalDate = new Date('2018-04-06'); // retrieving the original timestamp const originalTimestamp = originalDate.valueOf() // displaying the original date (non UTC / UTC) console.log(`original date (timezone dependent): ${originalDate.toString()}`) console.log(`original date (timezone independent): ${originalDate.toUTCString()}`) // we add one more day originalDate.setDate(originalDate.getDate() +1) const dayAfterTimestamp = originalDate.valueOf() // displaying the original date (non UTC / UTC) console.log(`updated date (timezone dependent): ${originalDate.toString()}`) console.log(`updated date (timezone independent): ${originalDate.toUTCString()}`) // check the differences (in milliseconds) console.log(`difference: ${(dayAfterTimestamp-originalTimestamp)}`) // displaying the original format (timezone independent)

最后,如果您想將日期字符串作為YYYY-MM-DD格式返回,您可能必須自己實現 :-/ ,或者使用toLocaleFormat方法,但它沒有標准化。

邏輯是將 24 小時以毫秒為單位添加到當前時間。 舉個例子:

var myDate = new Date();
var oneMoreDay = new Date();
oneMoreDay.setTime(myDate.getTime() + 86400000);
console.log(myDate.getDate());
console.log(oneMoreDay.getDate());

oneMoreDay 變量中增加了一天。 在您的具體示例中,您只想在 ORIGINAL 變量中再添加一天,因此我會執行以下操作:

date.setTime(date.getTime() + 86400000);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM