我在使用JavaScript中的new Date()函数时遇到问题。Safari浏览器会提示"Invalid Date"。
我在jsbin上创建了一个简短的示例。
这个在其他浏览器上似乎都没有问题,但是在Safari上不行。有任何想法如何将输入值(例如2011-01-03)转换为日期对象,并使其在Safari上正常工作吗?
非常感谢!
我在使用JavaScript中的new Date()函数时遇到问题。Safari浏览器会提示"Invalid Date"。
我在jsbin上创建了一个简短的示例。
这个在其他浏览器上似乎都没有问题,但是在Safari上不行。有任何想法如何将输入值(例如2011-01-03)转换为日期对象,并使其在Safari上正常工作吗?
非常感谢!
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构造函数来构建一个日期对象,注意月份参数需要以0为基础(0=Jan, 1=Feb,...11=Dec)。
我尝试的简单解决方案: 从http://datejs.com/下载date.js文件 将其包含在你的文件中
接下来, var date = Date.parse('1970-01-12 00:00:00'); var formattedDate = date.toString('yyyy-MM-dd');
虽然@CMS的解决方案可能更好,但我发现使用Date.parse('2011-01-13')
也是一个快速有效的解决方案。
csnover在GitHub上提供了一些先进的ISO 8601日期增强代码: https://github.com/csnover/js-iso8601/blob/master/iso8601.js
包含他的代码应该可以提供一个临时解决方案,同时Safari团队正在努力实现更完整的ES5。
NaN
作为返回值。 - Elliot Winkler