Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当前日期正在回滚到上个月_Javascript_Angular_Typescript_Momentjs - Fatal编程技术网

Javascript 当前日期正在回滚到上个月

Javascript 当前日期正在回滚到上个月,javascript,angular,typescript,momentjs,Javascript,Angular,Typescript,Momentjs,我的api的日期时间为2018-09-01T00:00:00.000Z。这是frame.scandate 我的计划中还有一个日期是2018-09。这简直是丑闻。这些可以是任何年/月组合,我只是举个例子 我的代码看起来像 this.allStations.forEach(station => { station.frames.forEach(frame => { if(moment(frame.scandate).isSame(momen

我的api的日期时间为2018-09-01T00:00:00.000Z。这是frame.scandate

我的计划中还有一个日期是2018-09。这简直是丑闻。这些可以是任何年/月组合,我只是举个例子

我的代码看起来像

    this.allStations.forEach(station => {
        station.frames.forEach(frame => {
            if(moment(frame.scandate).isSame(moment(scandate), 'month')){
                total+=frame.framesTotal;
            }
        })
这将使上一个frame.scandate和当前的scandate相匹配

这:

将输出以下内容:

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;
            }
        })
.add1,“分钟”是此处的关键更改


这是因为frame.scandate值具有00:00:00Z时间值吗?任何解释都将不胜感激。

时区可能有问题

这个脚本在西班牙运行

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来解决此问题:


使用moment.utc而不是满足输出期望的瞬间

我得到了2018-09这两个数字:我假设由于你所在的时区,日期从午夜向后滚动,最后是2019-08-31。非常有趣,我用你的小提琴得到了与我问题中相同的答案:向后滚动仍在发生。那可能是因为我的时区。我会做一些调查的,谢谢!克里斯·G为我回答了类似的问题;他甚至给了他正确的答案,而给了我错误的答案。我会做一些调查,然后再报告。这绝对是时区的东西;日期数据以毫秒精度的unix时间存储,然后根据其时区将其表示回用户。谢谢你,我真的很感激。我用moment.utc来初始化我的矩对象,回答了上面的问题。如果你想复制我的答案文本并放到你的文本中,我会将其标记为已回答。继续并删除你的答案;编辑我的,我会接受编辑
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'))
frame.scandate = moment.utc('2018-09-01T00:00:00.000Z');