我正在开发一个非常小的JavaScript库,允许用户根据日期检索内容。对于这些内容,日期只是一个标识符,而时区是完全不相关的(请按照Dilbert翻转日历的思路来考虑)。无论你在美国还是澳大利亚,“五一四”的内容都是一样的。
当前用于检索数据的函数以日期对象作为参数。在函数中,时区将被忽略。这种方法有意义吗?还是用一个独立于时区的标识符(比如2012-01-01)作为参数比较好呢?使用日期对象方法,浏览器进行的时区调整是否会导致返回错误数据的风险?
发布于 2013-04-28 21:03:29
这个方法在你自己的答案中唯一的问题是,它没有解释不明确的时间。这种情况发生在夏令储蓄的倒退过渡中。
例如,将计算机的时区设置为美国山区时间( windows上的“山区时间(美国&加拿大)”,或mac/linux上的“美国/丹佛”)。然后重新启动浏览器并运行以下javascript:
var dt = new Date(2013,10,3,1,0);
alert(dt);这是2013年11月3日凌晨1点但你不知道它代表的是哪一点钟。是在过渡前的山区夏令时间(UTC-6),还是在之后的山区标准时间(UTC-7)?无法判断,JavaScript将只使用标准时间。
现在,如果您需要的是2013-11-03 01:00 -那么您是正确的。您可以忽略偏移量,并完成它。但是,如果您要将该值用于任何有意义的东西--比如记录一个时间点,或者从另一个时间点减去它们之间的时间点,那么如果没有偏移量,您就无法解决这个问题。
不幸的是,在JavaScript中没有很好的解决这个问题的方法。最接近的是Moment.js,但它仍然是还不完美。不过,它比Date对象本身更好,因为它绕过了浏览器的不一致性,并提供了更好的解析和格式化。
https://stackoverflow.com/questions/16257387
复制相似问题