Я делаю функцию для пересчета времени на основе текущего времени. timeShowToday - это определенное время каждый день (устанавливается в 8:00 вечера), чтобы показать какой-то слепой ответ.

_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 имеют разные события datetime, хотя я только что назначил temp для timeShowYesterday. Это журнал, который я получаю, когда я его консоль:

05-03 00: 26: 59.623 ReactNativeJS: темп: пт 3 мая 2019 20:00:00 GMT + 0900
05-03 00: 26: 59.623 ReactNativeJS: timeShowYesterday: Sat May 04 2019 20:00:00 GMT + 0900

Как вы можете видеть, temp правильно записывает текущее время, но у timeShowYesterday +1 день. Я понятия не имею, почему это так, потому что все, что я делал, это просто назначал временную шкалу timeShowYesterday.

Я что-то пропустил? Спасибо

0
Eric Ahn 2 Май 2019 в 18:33

2 ответа

Лучший ответ

Похоже, вы предполагаете, что setDate создает новую дату без изменения исходной даты. Это не. Вместо этого он просто изменяет объект даты и возвращает собственную ссылку.

Использование это то, что это:

  date.setDate(10);
  date.setMinutes(10);

Может быть написано более элегантно, как:

  date.setDate(10).setMinutes(10);

Если вы хотите создать две независимые даты, вам необходимо скопировать дату :

  const copy = new Date(oldDate);
2
Jonas Wilms 2 Май 2019 в 15:54

Нашел проблему!

Я думал, что setDate

 timeShowToday = timeShowYesterday.setDate(
        timeShowYesterday.getDate() + 1
      );

Создаст новый экземпляр из timeShowYesterday, не затрагивая его, и назначит его timeShowToday, но на самом деле изменил его.

Так что +1 была проблема.

0
hyuk lee 2 Май 2019 в 15:52