首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在safari中的无效日期

在safari中的无效日期
EN

Stack Overflow用户
提问于 2010-11-30 05:58:18
回答 20查看 221.7K关注 0票数 260
代码语言:javascript
复制
 alert(new Date('2010-11-29'));

chrome,ff没有这方面的问题,但safari喊“无效日期”。为什么?

编辑:好的,按照下面的注释,我使用了字符串解析,并尝试了以下方法:

代码语言:javascript
复制
alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari

编辑2018年3月22日:似乎人们还在这里登陆-今天,我会使用momentdate-fns并完成它。约会-fns是非常没有疼痛和轻,以及。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2010-11-30 06:03:22

模式yyyy-MM-dd不是官方支持的Date构造函数格式。Firefox似乎支持它,但不要指望其他浏览器也这样做。

下面是一些受支持的字符串:

  • 嗯-天-耶
  • yyyy/MM/dd
  • 毫米/日/年
  • dd dd,yyyy
  • 嗯,天,耶

DateJS似乎是解析非标准日期格式的一个很好的库。

编辑:刚刚检查了ECMA-262标准。引用第15.9.1.15节的话:

日期时间字符串格式

ECMAScript在简化ISO8601扩展格式的基础上定义了日期时间的字符串交换格式。格式如下::mm:ss.sssz,其中的字段如下:

  • YYYY是公历中一年中的十进制数字。
  • "-“(连字符)在字符串中出现两次。
  • 毫米是从01 (1月)到12 (12月)的一年中的月份。
  • DD是从01到31的月份中的一天。
  • "T“字面上显示在字符串中,以指示time元素的开头。
  • HH是指自午夜以来已过的完整小时数,为两位小数。
  • ":“(冒号)在字符串中出现两次。
  • mm是从小时开始后的完整分钟数,为两位小数。
  • ss是一分钟开始后的完整秒数,为两位小数。
  • ".“(点)字面上显示在字符串中。
  • sss是从第二位开始以来的完整毫秒数,为三位小数位数。都是“。”并且可以省略毫秒字段。
  • Z是指定为"Z“( UTC)或"+”或"-“的时区偏移量,后面是时间表达式hh:mm。

此格式包括日期专用表格:

  • YYYY
  • YYYY
  • YYYY MM-DD

它还包括带有可选时区偏移量的纯时间表单:

  • H:嗯
  • 嗯:党卫军
  • THH:mm:ss.sss

还包括“日期-时间”,这可能是上述任何组合。

因此,似乎在标准中包含了YYYY DD,但出于某种原因,Safari不支持它。

Update:在查看datejs文档并使用它之后,您的问题应该使用如下代码来解决:

代码语言:javascript
复制
var myDate1 = Date.parseExact("29-11-2010", "dd-MM-yyyy");
var myDate2 = Date.parseExact("11-29-2010", "MM-dd-yyyy");
var myDate3 = Date.parseExact("2010-11-29", "yyyy-MM-dd");
var myDate4 = Date.parseExact("2010-29-11", "yyyy-dd-MM");
票数 237
EN

Stack Overflow用户

发布于 2011-04-13 09:01:23

对我来说,仅仅因为Safari不能正确地实现一个新的库就太过了,而regex则是过火了。这是oneliner

代码语言:javascript
复制
console.log (new Date('2011-04-12'.replace(/-/g, "/")));
票数 376
EN

Stack Overflow用户

发布于 2017-07-17 19:31:01

我也面临着一个类似的问题。Date.Parse("DATESTRING")正在开发Chrome (版本59.0.3071.115 ),但没有使用Safari (版本10.1.1 (11603.2.5) )。

狩猎旅行:

代码语言:javascript
复制
Date.parse("2017-01-22 11:57:00")
NaN

铬:

代码语言:javascript
复制
Date.parse("2017-01-22 11:57:00")
1485115020000

对我有用的解决方案是用"T"替换"T"中的空间。(例子:dateString.replace(/ /g,"T") )

狩猎旅行:

代码语言:javascript
复制
Date.parse("2017-01-22T11:57:00")
1485086220000

铬:

代码语言:javascript
复制
Date.parse("2017-01-22T11:57:00")
1485115020000

请注意,Safari浏览器的响应比在Chrome浏览器中看到的响应少8小时(28800000 is ),因为Safari在本地TZ中返回响应(比UTC落后8小时)

把两个时间都放在同一个TZ里

狩猎旅行:

代码语言:javascript
复制
Date.parse("2017-01-22T11:57:00Z")
1485086220000

铬:

代码语言:javascript
复制
Date.parse("2017-01-22T11:57:00Z")
1485086220000
票数 96
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4310953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档