Safari Date() 函数对日期时间字符串(yyyy-MM-dd HH:mm:ss) 提示NaN的问题入门教程_日期小白常识

今天发现一个奇怪的问题,在iPhone使用 safari 选择定时发布文章到OSC,选择时间后提示不是合法的时间,判断时间的代码如下:var d = new Date(‘2020-01-23 23:15’);if (isNaN(d)) {console.log(‘isNaN’);}else{console.log(‘pass’);}在Chrome下会输出 p

Safari Date() 函数对日期时间字符串(yyyy-MM-dd HH:mm:ss) 提示NaN的问题入门教程

今天发现一个奇怪的问题,在iPhone使用 safari 选择定时发布文章到OSC,选择时间后提示不是合法的时间,判断时间的代码如下:

Safari Date() 函数对日期时间字符串(yyyy-MM-dd HH:mm:ss) 提示NaN的问题入门教程_日期小白常识

var d = new Date('2020-01-23 23:15');
  if (isNaN(d)) {
    console.log('isNaN');
  }else{
    console.log('pass');
  }

在Chrome下会输出 pass,在Safari会输出 isNaN,根据 ECMAScript 5 ISO-8601 format support: 的说法

关于时间和日期字符的格式,有两种可能的方式,一种是 ‘2020-01-23 23:15’ ,另一种是 ‘2020-01-23T23:15’, 但 Safari 只支持后者,而Chrome则两种都支持,所以只要写成下面的方式,中间加入一个 T 就可以了。

new Date('2014-02-18T15:00:48')

转换的方式也很简单:

new Date('2014-02-18T15:00:48'.replace(/\s/, 'T')) 

更新:转换后可能会出现新的问题( 2020/02/02 updated )

如果你之前允许2020-01-23 1:15  这样的日期合法,转换后会返回为无效日期的情形。

如原来在chrome下

var d = new Date('2020-01-23 1:15');
  if (isNaN(d)) {
    console.log('isNaN');
  }else{
    console.log('pass');
  }

会返回pass

但修改后

var d = new Date('2020-01-23 1:15'.replace(/\s/,'T') );
  if (isNaN(d)) {
    console.log('isNaN');
  }else{
    console.log('pass');
  }

会返回isNaN,无效的日期

因此需要在转换前对 月/日/时/分做一次不足两位时的加前置0的转换,转换函数如下:

function prefixInteger(num, length) {
  return (Array(length).join('0') + num).slice(-length);
}

如对小时进行转换: hour = prefixInteger(hour,2)

海计划公众号
(0)
上一篇 2020/03/20 05:51
下一篇 2020/03/20 01:08

您可能感兴趣的内容