在iOS Safari,JavaScript使用Date.parse或Date()转换日期返回NaN或Invalid Date

Chrome

>Date.parse("2018-01-11 20:00:00");
1515672000000

Safari

>Date.parse("2018-01-11 20:00:00");
NaN

同样的日期字符串在Chrome解析正确,而在Safari返回NaN。

这个主要原因是Safari要求Date.parse()或Date()转换日期的字符串需要满足RFC2822 或ISO 8601定义的格式。

ISO 8601定义的格式

YYYY-MM-DDThh:mm:ss.sTZD

如果字符串不满足格式,Date.parse()返回NaN,new Date()返回Invalid Date对象。

与例子里的字符串相比,ISO 8601要求在日期和时间之间需要使用字符“T”隔开。

如果兼容Safari,Chrome,Firefox以及IE等,可以改为

>Date.parse("2018-01-11T20:00:00");

时区

可以注意到字符串“2018-01-11T20:00:00”是没有时区信息的,默认情况下它会被转换为本地时区的时间。

如果需要使用UTC时间,可以在最后加上Z。

表示东8区晚上8点的UTC时间

>Date.parse("2018-01-11T12:00:00Z");

ISO 8601格式的使用可以参考:Date.parse()或new Date()解析字符串的格式要求

版权声明:著作权归作者所有。

相关推荐

JavaScript检查Date对象是否为Invalid Date

使用Date()构造日期对象,如果传入非日期格式的字符串,仍然能构造出Date对象。在chrome控制台>var date = new Date("hello"); >date Invalid Date >typeof date “object” >date instanceof&nb

JavaScript使用Date.parse()或new Date()解析字符串日期的格式要求

在JavaScript里,Date.parse()会接收一个字符串作为参数,根据字符串格式返回:如果字符串符合日期格式,返回自1970-01-01 00:00:00 UTC时间起的毫秒数。如果字符串不符合格式,返回NaN。new Date(str),构造函数也可以接收一个字符串作为参数,把字符串转换为表示的日期。构造的日期对象为:如果字符串符合日期格式,返回自1970

iOS11固定UISearchBar在导航栏的高度

iOS 11重新设计了UISearchBar,四个角改为圆角,高度变大。在导航栏添加搜索框可能会导致导航栏高度变大,所以有必要固定UISearchBar的高度。固定搜索栏的高度为44let searchBar = UISearchBar()  //配置searchBar相关代码 navigationItem.titleView =&nbs