【问题标题】:AngularJS wrong unix time parse resultAngularJS 错误的 unix 时间解析结果
【发布时间】:2013-09-12 19:52:13
【问题描述】:

我有一个时间戳1378028575,它给了我Sun, 01 Sep 2013 09:42:55 GMThere。但是当我尝试使用 Angular date 对其进行格式化时,它会将其返回为 Jan 17, 1970 2:47:08 AM,使用以下格式:{{'1378028575' | date:'medium'}}。该站点的结果是正确的,但在 Angular 中是错误的。为什么会发生,或者我做错了什么?

【问题讨论】:

  • 日期是 Javascript 是从纪元开始的毫秒数。您已经使用了秒数。试试 1378028575*1000

标签: javascript unix angularjs timestamp


【解决方案1】:

这是因为您使用秒而不是毫秒。

new Date(1378028575)
Fri Jan 16 1970 23:47:08 GMT+0100 (CET)

new Date(1378028575000)
Sun Sep 01 2013 11:42:55 GMT+0200 (CEST)

来自角度文档:

日期格式化为日期对象,毫秒(字符串或数字) 或各种 ISO 8601 日期时间字符串格式(例如 yyyy-MM-ddTHH:mm:ss.SSSZ 及其较短的版本,如 yyyy-MM-ddTHH:mmZ、yyyy-MM-dd 或 yyyyMMddTHHmmssZ)。如果没有时区 在字符串输入中指定的时间被认为是在 当地时区。

【讨论】:

  • 那么这里给出的答案stackoverflow.com/questions/17925020/… 似乎不正确?他们在那里谈论 unix 时间,似乎 OP 也会有同样的问题。
  • 谢谢,这对我有用。我正在使用 Stripe,它以秒而不是毫秒的形式返回所有时间。将每个日期乘以 1000 就可以了!
【解决方案2】:

另一个答案并不完整。由于您的时间戳以秒为单位,而不是毫秒,因此在 Angular.js 中您可以这样做:

{{1378028575 * 1000 | date:'medium'}}

知道秒 * 1000 = 毫秒是一回事。知道您可以将数学放在日期表达式中是另一回事:)

【讨论】:

  • 对于大多数关注这个问题的人来说,这可能是更好的答案。在阅读了最初的答案后,我试图决定在哪里解决这个问题。理想情况下,我希望在我的服务中解决这个问题,但它会返回一个承诺。这给我留下了控制器,但如果另一个控制器曾经使用此服务,我将不得不重复代码或制作辅助函数。然后我读了你的答案。理想情况下,该服务将是处理此问题的地方,但我不确定是否可以完全重写。
猜你喜欢
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多