[英]Question regarding date function in javascript
我正在制作一個用於根據當前時間重新計算時間的函數。 timeShowToday是每天的特定時間(設置為8:00 pm),以顯示一些盲目的答案。
_checkTime = () => {
let timeNow = new Date();
let timeShowToday = new Date( //set at 8:00pm everyday
timeNow.getFullYear(),
timeNow.getMonth(),
timeNow.getDate(),
20,
0
);
let timeShowYesterday = timeShowToday.setDate(timeShowToday.getDate() - 1);
let timeDiff = timeShowToday.getTime() - timeNow.getTime();
if (timeDiff < 0) { //recalculate if current Time is past specific time(8:00pm)
let temp = new Date(
timeNow.getFullYear(),
timeNow.getMonth(),
timeNow.getDate(),
20,
0
);
console.log(temp);
timeShowYesterday = temp;
timeShowToday = timeShowYesterday.setDate(
timeShowYesterday.getDate() + 1
);
console.log(timeShowYesterday);
}
這里的問題是,盡管我剛剛將temp分配給timeShowYesterday,但變量temp和timeShowYesterday的日期時間卻不同。 這是在我進行控制台日志時得到的日志:
05-03 00:26:59.623 ReactNativeJS:臨時:2019年5月3日星期五20:00:00 GMT + 0900
05-03 00:26:59.623 ReactNativeJS:timeShow昨天:2019年5月4日星期六20:00:00 GMT + 0900
如您所見,temp正確記錄了當前時間,但是timeShowYesterday具有+1天。 我不知道為什么會這樣,因為我所做的只是將temp分配給timeShowYesterday。
我錯過了什么嗎? 謝謝
請注意setDate會修改您的參考,而不會創建新參考。
let timeNow = new Date(); let timeShowToday = new Date( //set at 8:00pm everyday timeNow.getFullYear(), timeNow.getMonth(), timeNow.getDate(), 20, 0 ); let timeShowYesterday = new Date(timeShowToday); timeShowYesterday.setDate(timeShowYesterday.getDate() - 1); console.log('Yesterday', timeShowYesterday); console.log('Today', timeShowToday); let timeDiff = timeShowToday.getTime() - timeNow.getTime(); if (timeDiff < 0) { //recalculate if current Time is past specific time(8:00pm) const timeShowYesterday = new Date( timeNow.getFullYear(), timeNow.getMonth(), timeNow.getDate(), 20, 0 ); timeShowToday = new Date(timeShowYesterday); timeShowToday.setDate(timeShowToday.getDate() + 1); console.log('Yesterday', timeShowYesterday); console.log('Today', timeShowToday); }
我更新了
let timeShowYesterday = new Date(timeShowToday); timeShowYesterday.setDate(timeShowYesterday.getDate() - 1);
和
timeShowToday = new Date(timeShowYesterday); timeShowToday.setDate(timeShowToday.getDate() + 1);
為避免覆蓋您的參考,只需創建一個新日期並進行更新即可。
您似乎假設setDate
創建了一個新日期而不更改原始日期。 它不是。 相反,它只是修改日期對象並返回一個自引用。
的用法是這樣的:
date.setDate(10);
date.setMinutes(10);
可以更優雅地寫成:
date.setDate(10).setMinutes(10);
如果要創建兩個獨立的日期,則必須復制日期 :
const copy = new Date(oldDate);
發現了問題!
我以為setDate
timeShowToday = timeShowYesterday.setDate(
timeShowYesterday.getDate() + 1
);
會從timeShowYesterday創建一個新實例,而不影響它,並將其分配給timeShowToday,但實際上對其進行了修改。
所以+1是問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.