文档章节

new Date() 在Safari下的 Invalid Date问题

会写代码的husky
 会写代码的husky
发布于 11/15 20:02
字数 361
阅读 95
收藏 1

问题复现

var timeStr = '2018-11-11 00:00:00';
var time = new Date(timeStr);	// error: Invalid Date
...

在safari浏览器下,time为Invalid Date, 导致后面代码执行错误;

其他浏览器诸如chrome,firfox,ie运行正常,time为:Sun Nov 11 2018 00:00:00 GMT+0800 (中国标准时间)。

问题原因

在safari浏览器下,new Date() 无法识别像 YYYY-MM-DD HH:mm:ss、YYYY.MM.DD HH:mm:ss这样的格式,只能识别YYYY/MM/DD HH:mm:ss、YYYY-MM-DDTHH:mm:ss这样的格式,但是chrome,firfox,ie都做了很好的拓展,都能识别。

new Date('2018-11-11 00:00:00')	
/* chrome: Sun Nov 11 2018 00:00:00 GMT+0800 (中国标准时间)  (正常)
   safari: Invalid Date
*/
new Date('2018.11.11 00:00:00')	
/* chrome: 正常
   safari: Invalid Date
*/
new Date('2018/11/11 00:00:00')	
/* chrome: 正常
   safari: 正常
*/
new Date('2018-11-11T00:00:00')	
/* chrome: 正常
   safari: 正常
*/

解决方案

  1. 直接转换时间字符串中的'-'为'/'。
var timeStr = '2018-11-11 00:00:00';
var date = new Date(Date.parse(timeStr.replace(/-/g, '/')));
  1. 基于Date创建自己的Date类。
 // es6环境
 class UnitDate {
 	constructor (date) {
		let { userAgent } = window.navigator;
		if (userAgent.includes('Safari')) {
            if (typeof date === 'string') {
                date = date.replace(/-/g, '/');
                return new Date(date);
            }
            return new Date(date);
        }
        return new Date(date);
	 }
 }
 var date = new UnitDate('2018-11-11 00:00:00');	//正常
 var date_2 = new UnitDate('2018.11.11 00:00:00');	//正常
 ...

© 著作权归作者所有

共有 人打赏支持
会写代码的husky
粉丝 6
博文 23
码字总数 17052
作品 0
北京
程序员
私信 提问
JS Safari不兼容Javascript中的Date()问题

var dateTime = new Date('2017-3-31 3:2'); window: 没问题 ; IE跟safari都不兼容,返回错误"Invalid Date" var dateTime = new Date('2018/3/2 3:2'); IE跟safari : 没问题 ; window: 报错......

orglee
04/20
0
0
关于 new Date在ios中出现Invalid Date 的问题

var datef=new Date("2017-2-22 06:23"); javaScript 的new Date("xxxx");这短代码在安卓手机上完美显示,但是iphone上返回的是Invalid Date 查资料发现: new Date("2017-2-22 06:23 ") 这种...

101ttyy
2017/08/14
0
0
js计算输入日期的前一天,后一天(上一日,下一日)。兼容safari

//下一天 function getNextday(){ var today=document.getElementById("lang0").value; var t=new Date(today); var tm=new Date(t.getFullYear(),t.getMonth(),t.getDate()+1); var m='0'+(......

zhwj407906450
2014/12/10
0
0
Redmine 2.5.2/2.4.6 发布,项目管理和缺陷跟踪

Redmine 2.5.2 和 2.4.6 发布,都是维护版本,包括许多 bug 修复,Rails 已升级到 3.2.19 版本。主要更新内容如下: Redmine 2.5.2: Defect #3483: Relative url for source links in notif...

oschina
2014/07/07
3.1K
5
iOS 平台问题集

Position fixed & scrolling on iOS iOS 5.0- 的Date构造函数不支持规范标准中定义的YYYY-MM-DD格式,如 new Date('2013-11-11') 是 Invalid Date, 但支持YYYY/MM/DD格式,可用 new Date('20......

陈文亮
2015/03/01
5
0

没有更多内容

加载失败,请刷新页面

加载更多

etcd集群备份和数据恢复

etcd是一个分布式k-v数据库,在kubernetes中使用其管理集群的元数据。这里介绍etcd集群数据的备份和数据恢复的方法和步骤。 本文来自于:https://www.maideliang.com/index.php/archives/25/...

openthings
14分钟前
0
0
「阿里面试系列」面试加分项,从JVM层面了解线程的启动和停止

文章简介 这一篇主要围绕线程状态控制相关的操作分析线程的原理,比如线程的中断,线程的通信等,内容比较多,可能会分两篇文章 阿里面试系列导读:关注我的技术公众号【架构师修炼宝典】一周...

Java架构资源分享
21分钟前
2
0
centos安装confluence全攻略

https://blog.csdn.net/qwer026/article/details/51439076

happyeveryday32
35分钟前
3
0
30 行 Javascript 代码搞定智能家居系统

本文首发于『阿里云 IoT 开发者社区』,更多精彩物联网内容欢迎前往浏览。 智能家居可谓是今年物联网的热门领域,通过智能单品和智能音箱,人们已然把『智能』两个字变成了生活的理所应当。搭...

阿里云官方博客
38分钟前
4
0
sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部