Я делаю функцию для пересчета времени на основе текущего времени. 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.
Я что-то пропустил? Спасибо
2 ответа
Похоже, вы предполагаете, что 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 была проблема.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.