javascript – 带有新Date()的随机错误转换时间戳

由于时间戳最近超过了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这样的日期在某些情况下可能是合法的)

所以我有两个问题:

>有没有人经历过这种情况?这是一个知道的javascript错误(我已经搜索过,但没有发现任何有关此事的投诉.)
>我怎么能更好地取代这个电话呢?我正在使用Angular v1.5,Moment.js,JQuery 2.x – 这个精确的调用是在Angular控制器中.

感谢您的关注

丹尼斯

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

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

– 好结局 –

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

useStrict: true

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

点赞