文档章节

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

FalconChen
 FalconChen
发布于 01/23 23:09
字数 476
阅读 351
收藏 0

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

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: 的说法

Alternatively, the date/time string may be in ISO 8601 format. For example, "2011-10-10" (just date) or "2011-10-10T14:48:00" (date and time) can be passed and parsed.

 

关于时间和日期字符的格式,有两种可能的方式,一种是 '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)

© 著作权归作者所有

FalconChen
粉丝 127
博文 142
码字总数 73397
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

ORACLE中date类型字段的处理

1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98' 在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月-03' (2)转换字符串为日期 使用ORACLE内部......

Oscarfff
2016/05/23
55
0
javascript new Date()

new Date("2012-09-25").getYear()在firefox中能成功,在IE中结果为:NAN。 所以请遵循标准: 创建一个日期对象: 一起jquery,17jquery var objDate=new Date([arguments list]); 参数形式有......

吕坤
2015/01/22
91
0
js 字符串日期 yyyy-MM-dd 转化为 date

遇到一个需要把日期字符串(如:2009-02-03)转换成Javascript中日期对象Date,对Javascript知识的匮乏和四栋让我感觉很迷茫,上网查了一些资料,弄出来了哈。。。 直接进主题: 创建一个日期...

云栖希望。
2017/12/04
0
0
safari浏览器时间出现NAN

Date.parse()方法当无法解析的时候会返回NAN,YYYY-MM-DD HH:MM:SS格式无法解析,需要转换成YYYY/MM/DD HH:MM:SS格式。在firefox和chrome中可以直接支持Date.parse(YYYY-MM-DD HH:MM:SS),但是...

潇潇程序缘
2019/05/31
225
0
sql server 函数

替换函数:replace(字符串,'被替换内容','替换内容'); 字符串截取函数:substring(字符串,开始位置,长度);  //开始位置从1开始 类型转换函数: 类型 为空判定函数:Isnull(列名或者变量名...

林新育
2017/07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

host machine and virtual machine communication between the three kinds of connection

1.桥接birdge模式 将虚拟机IP与物理机IP设在一个网段上,此时虚拟机相当于一台网络中与本地物理机公用一个HUB的独立设备。网络中其他机器与虚拟机、本地物理机与虚拟机都可以双向通信。虚拟机...

欣欣向荣666
16分钟前
16
0
Centos7安装gitblit

Gitblit介绍 Gitblit是一款开源工具,使用Java编写,用于管理、查看及服务于Git版本库。 Gitblit两种安装包 Gitblit GO:内部集成了Jetty服务器,不需要再集成其他容器,使用简单方便。(本文...

yhb890430
22分钟前
30
0
Ubuntu 安装 Source Code Pro 字体

1、解压字体 $ tar -zxvf source-code-pro-2.030R-ro-1.050R-it.tar.gz 2、解压字体 $ sudo cp -r source-code-pro-2.030R-ro-1.050R-it/TTF/ /usr/share/fonts/truetype/source-code-pro......

张小渔
23分钟前
53
0
mongo Authentication failed记录

虽然用的管理员账号,但是还是出现了以下的错误: 主要看后面的错误信息: { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" } 在想管......

woshixin
35分钟前
55
0
PHP+jPaginate插件制作无刷新分页实例

jPaginate是一款动感滚动分页插件,它的表现形式是像分页的按钮一样,有意思的是这些按钮却可以左右滚动,可以通过单击或鼠标滑向点两侧的小箭头来控制按钮的左右滚动。 读取第一页数据: <d...

ymkjs1990
40分钟前
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部