Javascript iOS safari getTime()DST行为

Javascript iOS safari getTime()DST行为,javascript,datetime,dst,gettime,Javascript,Datetime,Dst,Gettime,在DST转换期间,我在将datetime字符串转换为unix ms时间戳时遇到了iOS 8.2 safari的一个奇怪行为。假设我们有js代码 function date2unix(dates){ var len = dates.length; var result = [], arr; while(len--) { arr = dates[len].split(/[- :]/); result[len]= (new Date(arr[0], arr[1]-1, ar

在DST转换期间,我在将datetime字符串转换为unix ms时间戳时遇到了iOS 8.2 safari的一个奇怪行为。假设我们有js代码

function date2unix(dates){
  var len = dates.length;
  var result = [], arr;
  while(len--) {
    arr = dates[len].split(/[- :]/);
    result[len]= (new Date(arr[0], arr[1]-1, arr[2], arr[3],arr[4],arr[5]).getTime());
  }
  return result;
}

var dates =
["2015-03-29 00:00:00","2015-03-29 00:15:00","2015-03-29 00:30:00","2015-03-29 00:45:00","2015-03-29 01:00:00","2015-03-29 01:15:00","2015-03-29 01:30:00","2015-03-29 01:45:00","2015-03-29 03:00:00","2015-03-29 03:15:00","2015-03-29 03:30:00","2015-03-29 03:45:00"];

alert(date2unix(dates))
iOS 8.2 Safari给出了不明确的值1st==5th,2nd==6th。。。而chrome 41.0.2272.101性能正常。请注意,数组日期中省略了有争议的第2个小时。有人能帮我找到解决办法吗

尝试:


关于

所讨论的时间在您的时区中无效,因为它们落入了“向前春天”夏令时转换所产生的间隙中

在JavaScript中执行此操作时,实现是未定义的。每个浏览器都会做一些不同的事情。有些浏览器会向前跳,有些会向后跳。你对此无能为力,因为这是一种不确定的行为

另一种思考方式是,JavaScript可能应该为这些值返回未定义的值。它不能做到这一点的唯一原因是,调用有效对象的构造函数时,无法获得未定义的结果。但从逻辑上讲,该值是未定义的

下图显示了这一差距。这个特殊的图表是美国太平洋时区的,但同样的想法适用于所有使用DST的区域,但日期和时间会有所不同。此图中从2:00开始到3:00的本地时间值未定义。例如,如果您在这一天指定了2:30,一些实现会给您1:30,而一些实现会给您3:30

正确的做法是不要尝试转换无效的时间


另请参见:。

理想输出为1427583600000、1427584500000、1427585400000、1427586300000、1427587200000、1427588100000、1427589000000、1427589900000、1427590800000、1427591700000、1427592600000、1427593500000,无任何重复,iOS给出1427583600000、1427584500000、1427585400000、1427586300000、1427583600000、1427584500000,1427585400000、1427586300000、1427590800000、1427591700000、1427592600000、1427593500000FYI-如果不知道计算机配置的时区设置,则无法验证这些精确结果。