在Safari中使用Javascript的新Date()

时间:2011-01-07 05:21:52

标签: javascript jquery date safari new-operator

我在Javascript中使用新的Date()函数时遇到问题。 Safari正在给我一个“无效日期”消息。

我在jsbin创建了一个简短示例。

这似乎适用于所有其他浏览器,但不适用于Safari。有关如何从输入中获取值(例如2011-01-03)并将其转换为日期对象的任何想法,同时让它在Safari中正常工作?

非常感谢!

4 个答案:

答案 0 :(得分:41)

JavaScript上的日期解析行为是依赖于实现的,ISO8601格式最近被添加到ECMAScript第5版规范中,但所有实现都不支持。

我建议你手动解析它,例如:

function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  return new Date(parts[0], parts[1]-1, parts[2]);
}

parseDate('2011-01-03'); // Mon Jan 03 2011 00:00:00

基本上上面的函数匹配每个日期部分并使用Date构造函数来构建日期对象,请注意 months 参数需要是基于0的(0 = 1月1日=二月,... 11 =十二月)

答案 1 :(得分:2)

我试过的简单解决方案 从http://datejs.com/下载date.js 包含在您的文件中

然后  var date = Date.parse('1970-01-12 00:00:00');  var formattedDate = date.toString('yyyy-MM-dd');

答案 2 :(得分:1)

虽然@ CMS的解决方案可能更优越,但我发现使用Date.parse('2011-01-13')也是一种快速,有效的解决方案。

答案 3 :(得分:0)

csnover在GitHub上提供了一些渐进的ISO 8601日期增强代码: https://github.com/csnover/js-iso8601/blob/master/iso8601.js

当Safari团队致力于更完整的ES5实施时,包括他的代码应提供临时修复。