【问题标题】:"getDate().toJSON()" loses a day“getDate().toJSON()” 损失了一天
【发布时间】:2015-07-08 23:01:35
【问题描述】:

我正在使用pikaday 日期选择器插件(通过angular directivemomentjs)并将值发送到服务器。不过,转换为 json 似乎会浪费一天的时间:

var d = myPikaObject.getDate();
console.log(d);              // Thu Apr 30 2015 00:00:00 GMT+0200 (SAST)
console.log(d.toJSON());     // 2015-04-29T22:00:00.000Z

我认为这是一个 momentjs 问题,但我不知道出了什么问题。

【问题讨论】:

  • 一天都不会浪费。看到 GMT+0200 了吗?如果你带走了 2 个小时,日期会是什么时候?
  • 我认为您可能会混淆更改为使用不同的时区而不是浪费一天。由于浏览器和服务器时区的差异,我遇到了这种情况。
  • 由于时区的原因,损失一天 = 小时差。
  • 诅咒,我需要的只是日期——我认为 T22 是对时区的引用,哈哈。谢谢
  • toJSON 输出一个 ISO 时间字符串。 console.log 输出一个语言环境时间字符串。那就是区别。没有时间浪费。

标签: javascript angularjs date momentjs pikaday


【解决方案1】:

如果您已经有时间使用 momentjs,您可以尝试moment.utc() 方法。文档说:

从 2.0.0 版开始,可以将语言环境键作为第三个参数传递 到 moment() 和 moment.utc()

moment('2012 juillet', 'YYYY MMM', 'fr');
moment('2012 July',    'YYYY MMM', 'en');

您可以使用 utc() 方法做更多事情。

moment.utc();
moment.utc(Number);
moment.utc(Number[]);
moment.utc(String);
moment.utc(String, String);
moment.utc(String, String[]);
moment.utc(String, String, String);
moment.utc(Moment);
moment.utc(Date);

【讨论】:

  • 谢谢,我正在使用moment(d).format("YYYY-MM-DD")(其中 d 是上述问题中的变量)。
  • 乐于助人!可能你也会投票,因为这有帮助? :)
【解决方案2】:

一切都与日期的格式有关。

当你刚刚 print d 时,你有这个:

Thu Apr 30 2015 00:00:00 GMT+0200 (SAST)

现在是 GMT +2,所以当您打印 d.ToJson() 时,您损失了 2 个小时。所以你是前一天下午 22 点

【讨论】:

  • 好的,我明白了。谢谢!不过,我怎样才能找到正确的日期?
  • 同时存储时区,然后在稍后解析时,将时区考虑在内。或者,不要使用.toJSON(),而是使用.toString()
  • “我如何获得正确的日期?” 始终以 UTC 格式存储日期/时间。仅出于显示目的转换为本地时间。
  • @FelixKling 我明白你所说的逻辑,在通常情况下我会,但老实说,在我看来,有些日期不应该本地化:生日,例如,它只是连接到一个不是“可本地化”的日期/时间的日期,如果你搬到新西兰,你就能早点过生日。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2021-07-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多