Дата откатывается к предыдущему месяцу - PullRequest
0 голосов
/ 15 января 2019

Дата моего времени из моего API равна 2018-09-01T00:00:00.000Z. Это frame.scandate.

У меня есть другая дата, которая генерируется в моей программе как 2018-09. Это просто scandate. Это может быть любой год / месяц, я просто привожу примеры.

Мой код выглядит как

    this.allStations.forEach(station => {
        station.frames.forEach(frame => {
            if(moment(frame.scandate).isSame(moment(scandate), 'month')){
                total+=frame.framesTotal;
            }
        })

Это будет соответствовать предыдущему frame.scandate с текущим scandate.

Это:

scandate = '2018-09';\
frame.scandate = '2018-09-01T00:00:00.000Z';
console.log(moment(scandate).format('YYYY-MM'));
console.log(moment(frame.scandate).format('YYYY-MM'));

выведет это:

2018-09
2018-08

Я исправил проблему следующим образом:

    this.allStations.forEach(station => {
        station.frames.forEach(frame => {
            if(moment(frame.scandate).add(1, 'minute').isSame(moment(scandate), 'month')){
                total+=frame.framesTotal;
            }
        })

.add(1, 'minute') является ключевым изменением здесь.

Это потому, что значение frame.scandate имеет значение времени 00:00:00Z? Любое объяснение будет с благодарностью.

1 Ответ

0 голосов
/ 15 января 2019

Вероятно, что-то происходит с часовыми поясами.

Этот скрипт запускался в Испании

var moment = require('moment'); // This is because I've tested it in a nodejs environment
var scandate = '2018-09';
var result = moment(scandate);
console.log(moment(result).format('YYYY-MM-DD'))

Выходы 2018-09-01


Мы могли бы обойти это, инициализируя frame.scandate примерно так:

frame.scandate = moment.utc('2018-09-01T00:00:00.000Z');

С moment.utc() вместо moment() ожидаемые результаты удовлетворяются.

...