将日期字符串转换为ISO 8601格式字符串,最终转换为日期对象

时间:2016-06-22 18:19:53

标签: javascript

我会简单地说...... 从帖子请求获取日期字符串为:

var str = "25/01/2014";

然而,当使用Date.parse()函数时:

var date = Date.parse (str);

当我试图打印时,我正在拿到NaN。

将这种字符串格式化为iso-8601格式的推荐方法是什么,或者我可以将这种字符串转换为日期格式的其他方式?

3 个答案:

答案 0 :(得分:1)

有关日期字符串格式转换的一般建议,请参阅Converting string to date in js

适用于您的具体案例:

// Convert DD/MM/YYYY to ISO format YYYY-MM-DD:
let string = "01/02/2016";
let re = /(\d+)\/(\d+)\/(\d+)/;
let date = new Date(string.replace(re, "$3-$2-$1"));

console.log(date);

答案 1 :(得分:1)

说实话你的代码在我的系统中有效。但是如果你想保持安全,那么拆分字符串并从中创建日期对象。

var a = '25/01/2014';
var b = a.split('/');
var d = new Date(b[2],b[1],b[0]);

答案 2 :(得分:0)

如果您知道提供的字符串str具有dd/mm/yyyy格式,那么您可以使用

var date= new Date( str.split( "/" ).reverse() );

Date.parse保证解析简化的ISO-8601格式。是否可以识别其他格式取决于实施。但请注意,上面的代码将年,月和日作为数字传递给构造函数,因此它不能再次解析它。

编辑:

我上面的代码错误。它对我有用,因为反向数组将被转换为字符串“2014,01,25”,Mozilla的Date.parse恰好接受了。您需要单独传递参数,如@Alex Kudryashev和@le_m所建议的那样。甚至

Date.prototype.constructor.apply( null, array )

不会工作,因为Date构造函数在作为函数调用时的行为会有所不同。