Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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 toJSON函数从日期对象减去一天_Javascript_Date - Fatal编程技术网

Javascript toJSON函数从日期对象减去一天

Javascript toJSON函数从日期对象减去一天,javascript,date,Javascript,Date,我正在javascript中使用date对象进行一些日期操作。 我花了大约一个小时来理解一个bug:在初始化之后,我使用了.toJSON()函数,我的日期减少了一个。下面是我所做工作的代码示例: var date = new Date(); console.log(date.getDate()); // print "19" date.setDate(date.getDate()-1); // print "18" var formated = date.toJSON().substr(0, 1

我正在javascript中使用
date
对象进行一些日期操作。 我花了大约一个小时来理解一个bug:在初始化之后,我使用了
.toJSON()
函数,我的日期减少了一个。下面是我所做工作的代码示例:

var date = new Date();
console.log(date.getDate()); // print "19"
date.setDate(date.getDate()-1); // print "18"
var formated = date.toJSON().substr(0, 10); // print "2013-09-17"
突然,日期从18日移到了17日。 因此,可以肯定的是,我直接在开发人员控制台中尝试了这一点:

new Date(2013, 09, 19)
Sat Oct 19 2013 00:00:00 GMT+0200 (Paris, Madrid (heure d’été)) // date "19" as it should
new Date(2013, 09, 19).toJSON()
"2013-10-18T22:00:00.000Z" // date "18" as it shouldn't
现在我的问题只是“为什么?”

这可能是我的配置还是其他原因造成的


是虫子吗?如果是,这是一个已知的错误吗?

这里绝对没有错误,只需检查时区。

这里绝对没有错误,只需检查时区。

JSON字符串以GMT为单位(这就是末尾的
Z
的意思)。你的当地时间比那早两个小时。因此,您所在时区的19日午夜是格林尼治标准时间18日的22:00。

JSON字符串是格林尼治标准时间(这就是末尾的
Z
的意思)。你的当地时间比那早两个小时。因此,您所在时区19日的午夜是格林威治标准时间18日的22:00。

如果您仔细观察:

new Date(2013, 09, 19);
=> Sat Oct 19 2013 00:00:00 GMT+0200 (CEST)
这里有两件事很重要:

  • 时间:
    00:00:00
  • 时区:
    +0200
  • 然后,当您调用
    .toJSON
    时,它将以GMT+0转换它

    所以
    00:00:00-2小时
    =
    今天-1小时,22:00:00

    现在看一下:

    new Date(2013, 09, 19).toJSON()
    => "2013-10-18T22:00:00.000Z"
    
    前一天,但小时设置为
    22:00:00

    这就是原因:从
    GMT+0200
    切换到
    GMT+0


    现在,对于解决方案,已经有人问过了:;)

    如果你仔细观察:

    new Date(2013, 09, 19);
    => Sat Oct 19 2013 00:00:00 GMT+0200 (CEST)
    
    这里有两件事很重要:

  • 时间:
    00:00:00
  • 时区:
    +0200
  • 然后,当您调用
    .toJSON
    时,它将以GMT+0转换它

    所以
    00:00:00-2小时
    =
    今天-1小时,22:00:00

    现在看一下:

    new Date(2013, 09, 19).toJSON()
    => "2013-10-18T22:00:00.000Z"
    
    前一天,但小时设置为
    22:00:00

    这就是原因:从
    GMT+0200
    切换到
    GMT+0


    现在,对于解决方案,已经有人问过了:;)

    这是因为-2小时的时间偏移。 尽力

    YourDate.setHours(0, -YourDate.getTimezoneOffset(), 0 0);
    

    这将是一个正确的日期。

    这是因为-2小时的时间偏移。 尽力

    YourDate.setHours(0, -YourDate.getTimezoneOffset(), 0 0);
    

    这将是一个正确的日期。

    Thx我应该考虑一下……我会确认的。我希望其他答案的链接将帮助您确定解决方案;)我的解决方案是“永远不要再使用该函数”。但现在我知道\o/Thx我应该考虑一下……我会的。我希望其他答案的链接将帮助您确定解决方案;)我的解决方案是“永远不要再使用该函数”。但现在我知道了\o/