簡體   English   中英

關於JavaScript中的日期函數的問題

[英]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.

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