Сравнение дат работает локально, но не на герою - PullRequest
0 голосов
/ 04 октября 2019

В приложении Vuejs у меня есть кнопка, которую можно использовать один раз в день. После щелчка один раз он отключается до следующего дня. Это прекрасно работает локально, но на heroku сравнение не работает.

Вот вычисленное значение y date в компоненте vue, которое возвращает true, если Act был создан после 00:00 текущей даты:

  computed: {
    ...
    actedToday() {
      if (!!this.$store.getters.lastAct) {
        let now = new Date();
        console.log('this is now in actedToday computed: ', now);
        let lastActDate = new Date(this.$store.getters.lastAct.created_at);
        console.log('this is last act date in computed actedToday', this.$store.getters.lastAct.created_at);
        console.log('was last Act today? ', lastActDate.getTime() > now.setHours(0,0,0,0));

        return lastActDate.getTime() > now.setHours(0,0,0,0)
      }
    }
  }, 

Вот что console.log возвращает локально:

this is now in actedToday computed:  Fri Oct 04 2019 15:20:24 GMT-0400 (Eastern Daylight Time)
ActButton.vue?0bb7:31 this is last act date in computed actedToday 2019-10-04T19:20:23.901Z
ActButton.vue?0bb7:32 was last Act today?  true

А вот аналогичные журналы из приложения heroku:

this is now in actedToday computed:  Fri Oct 04 2019 15:21:18 GMT-0400 (Eastern Daylight Time)
ActButton.vue:31 this is last act date in computed actedToday 2019-10-04T03:30:22.266Z
ActButton.vue:32 was last Act today?  false

ВВ первом примере сравнение работает как положено. Во втором, хотя обе даты в один и тот же день, сравнение возвращает ложь.

1 Ответ

0 голосов
/ 05 октября 2019

Ваша проблема возникает из-за разных часовых поясов. Ваш lastActDate в зулусском времени (UTC, обратите внимание на Z в конце), но ваш actedToday в EDT. Использование setHours(0,0,0,0) даст вам начало дня, но в том же часовом поясе. Таким образом, у вас есть следующие значения:

//locally
now = Fri Oct 04 2019 15:20:24 GMT-0400 (Eastern Daylight Time)
now.setHours(0,0,0,0) = Fri Oct 04 2019 00:00:00 GMT-0400 (Eastern Daylight Time)
lastActDate = 2019-10-04T19:20:23.901Z = Fri Oct 04 2019 15:20:23.901 GMT-0400 (Eastern Daylight Time)

//heroku
now = Fri Oct 04 2019 15:21:18 GMT-0400 (Eastern Daylight Time)
now.setHours(0,0,0,0) = Fri Oct 04 2019 00:00:00 GMT-0400 (Eastern Daylight Time)
lastActDate = 2019-10-04T03:30:22.266Z = Fri Oct 03 2019 23:30:22.266 GMT-0400 (Eastern Daylight Time)

Таким образом, heroku прав, и ваше последнее действие не было «сегодня». Вам следует рассмотреть возможность использования одного и того же часового пояса во всех ваших датах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...