从字符串制作JavaScript日期对象使用拆分和映射

时间:2016-03-20 19:29:41

标签: javascript

我有一个javascript字符串,我将其拆分为Date对象的数字,然后使用map转换为数字。在解析和映射时,日期不喜欢格式。

这不起作用:

var timeString = '2016-01-01T17:44:32';
var dateTime = new Date( timeString.split(/T|:|-/).map(Number) );

这不起作用:

var timeString = '2016-01-01T17:44:32';
var x = timeString.split(/T|:|-/).map(Number);
var dateTime = new Date( x );

但这仍然有效:

var timeString = '2016-01-01T17:44:32';
var x = timeString.split(/T|:|-/).map(Number);
var dateTime = new Date( x[0], x[1], x[2], x[3], x[4], x[5] );

我猜测传递给函数或构造函数的数组在JavaScript中没有被展平。有什么我缺少的或第一个例子接近工作?第三个有效的解决方案就是丑陋。

2 个答案:

答案 0 :(得分:0)

JavaScript Date构造函数接受以下之一:

  • 没有参数,返回具有当前日期的Date对象;
  • 日期字符串
  • 以毫秒为单位的Unix时间戳(Date.now()就是一个很好的例子)
  • 一系列参数,格式如下:year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]

在您的情况下,不需要操纵字符串。只需使用下面的代码块就可以解决问题:

var timeString = '2016-01-01T17:44:32';
var dateTime = new Date( timeString );
console.log(dateTime.getTime()); // 1451670272000

答案 1 :(得分:0)

很简单,要将任何Array元素作为参数传递给构造函数,您只需要生成一个包含所需数组的新构造函数。

试试这个:



var timeString = '2016-01-01T17:44:32';

   // now generate new Date Constructor loaded with you array arguments
var arrComponents = timeString.split(/T|:|-/).map(Number);
var newDateConstuctor = Date.bind.apply(Date,arrComponents);

var dateTime = new newDateConstuctor();