带有新Date()

时间:2017-08-22 07:01:57

标签: javascript angular date datetimepicker

由于时间戳最近超过了15亿,我的一个剧本中出现了一个奇怪的(显然是随机的)错误。

我要初始化一个dateTimePicker,我这样做了:

$('#datepickerfield').data('DateTimePicker').date(new Date(1502173800000));

1502173800000当然是毫秒时间戳。大多数情况下,它只是起作用

但正如你所看到的,某种程度上15021738 ......可能(事实上,有时候,IS)被错误地解释为15/02/1738(法国dd / mm / yyyy格式)......事实并非如此时间戳以1499或甚至1500开头,错误只是在时间戳开始1501开始(导致1月15日),依此类推。

它确实看起来很随机,非常烦人,几乎不可能在服务器端修复(太多的情况需要考虑,甚至像15/02/1738这样的日期在某些情况下可能是合法的)

所以我有两个问题:

  1. 有没有人经历过这个?这是一个知道的javascript错误(我已经搜索过,但没有发现任何有关此事的投诉。)
  2. 我怎么能更好地替换这个电话?我正在使用Angular v1.5,Moment.js,JQuery 2.x - 这个精确的调用是在Angular控制器中。
  3. 感谢您的关注

    丹尼斯

1 个答案:

答案 0 :(得分:1)

事实证明问题与Date无关(我用moment.unix(timestamp)替换了调用,问题仍然存在)。

首先,它毕竟不是那么随意。从时间戳到日期的转换仅在“可能”时发生,即当四个第一个数字看起来像一个可能的“ddmm”(自1501 ......),后面的四个数字像“yyyy”(几乎总是)和2个跟随之后“hh”,即0到23之间。

- HAPPY END -

这个奇怪的解析错误是由于datetimepicker的选项(这里的这个:http://eonasdan.github.io/bootstrap-datetimepicker/)默认为false。

useStrict: true

有关详细信息(选项本身会影响Moment.js库),请参阅http://eonasdan.github.io/bootstrap-datetimepicker/Options/#usestrict