将日期从字符串转换为日期Javascript

时间:2018-12-18 08:59:35

标签: javascript node.js date

我尝试了以下代码

var parts ='2014-04-03'.split('-');
    // Please pay attention to the month (parts[1]); JavaScript counts months from 0:
    // January - 0, February - 1, etc.
    var mydate = new Date(+parts[0], +parts[1] - 1, +parts[2]); 
    console.log(mydate);

但是,结果是

2014-04-02T17:00:00:000Z

我想知道为什么结果不是2014-04-03

谢谢

3 个答案:

答案 0 :(得分:1)

当心,javascript在创建日期和序列化日期时都会潜入本地时区。显示的代码new Date(int,int,int)创建了一个日期对象,该对象表示指定的年/月/日的本地午夜。

可以完全解析

YYYY-MM-DD日期。只需执行new Date('2014-04-03')。这将为您提供a midnight UTC date object,正是您想要的。

这时,您需要对格式化(序列化)时使用的方法稍加小心,更多有关上面链接的详细信息。

var myDate = new Date('2014-04-03')
console.log(myDate.toLocaleDateString("fr",{timezone:"UTC"}))

答案 1 :(得分:0)

您可以使用一个Javascript函数将日期转换为所需的'yyyy-MM-dd'格式。 下面是代码段。

function DateToStr(date, format) {
  let z = {
    y: date.getFullYear(),
    M: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    m: date.getMinutes(),
    s: date.getSeconds()
  };
  return format.replace(/(y+|M+|d+|h+|m+|s+)/g, v => ('0' + z[v.slice(-1)]).slice(-v.length));
}

var parts = '2014-04-03'.split('-');
var mydate = new Date(parts[0], parts[1] - 1, parts[2]);
var a = DateToStr(mydate, 'yyyy-MM-dd')

console.log(a);

答案 2 :(得分:0)

使用Date.UTC时,它会以UTC格式处理日期,并丢弃本地时区和夏时制。

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(Date.UTC(+parts[0], +parts[1] - 1, +parts[2])); 
console.log(mydate);