Javascript 如何将年份字符串解析为零时间日期

Javascript how to parse year String to date with zero time

我想将 '2015' 字符串解析为 Date

问题是因为冬令时和时区调整了一小时。 是否可以得到:

Fri Jan 01 2010 00:00:00 当我做 new Date("2010")moment("2010")

在以下情况下:

Fri Jan 01 2010 01:00:00 GMT+0100 (W. Europe Standard Time)

我希望小时总是00:00

编辑

未提及:在我的例子中,我不知道以哪种格式获取日期字符串。它可以是 yearyear monthyear month day hours 等。我要问的是如何将字符串格式化为日期,所有未知值将是:01 for days and months00 for hours and minutes.

您可以在 Date 构造函数中设置此信息,如下所示:

new Date(2010, 0); // params: year, month

或者如果您需要从字符串创建日期:

var year = "2010";
new Date(parseInt(year), 0);
new Date(year + "-01-01");

您可以为此创建一个包装器。

注意:当你做 new Date() 时,你也会得到 time,但是当你做 new Date(yyyy,mm,dd) 时,不会添加时间,时间总是 00:00:00

function createYearStartDate(year){
  return new Date(year, 0,1);
}

(function(){
  var d1 = createYearStartDate("2010")
  console.log(d1)
})()

使用moment你可以拥有:

moment("2015", "YYYY");
// 2015-01-01T00:00:00+01:00

如果您需要使用当地时间,而如果您想使用 utc,您可以:

moment.utc("2015", "YYYY");
// 2015-01-01T00:00:00+00:00

编辑 在您发表评论后:

您可以使用 moment parsing 格式数组:

var s = "2015";
moment(s, ["YYYY", "YYYY MMMM"]);     // 2015-01-01T00:00:00+01:00
moment.utc(s, ["YYYY", "YYYY MMMM"]); // 2015-01-01T00:00:00+00:00
s = "2010 February";
moment(s, ["YYYY", "YYYY MMMM"]);     // 2010-02-01T00:00:00+01:00
moment.utc(s, ["YYYY", "YYYY MMMM"]); // 2010-02-01T00:00:00+00:00

编辑#2 对于 moment,您可以使用:

moment(s, ["YYYY MM DD HH:mm:ss", "YYYY MMMM DD HH:mm:ss"]);

例如:

function testMoment(s){
  var d = moment(s, ["YYYY MM DD HH:mm:ss", "YYYY MMMM DD HH:mm:ss"]);
  console.log( d.format() );
}

testMoment("2010");             // 2010-01-01T00:00:00+01:00
testMoment("2010 02");          // 2010-02-01T00:00:00+01:00
testMoment("2010 Feb");         // 2010-02-01T00:00:00+01:00
testMoment("2010 February");    // 2010-02-01T00:00:00+01:00
testMoment("2010 02 03");       // 2010-02-02T00:00:00+01:00
testMoment("2010 Feb 03");      // 2010-02-03T00:00:00+01:00
testMoment("2010 Feb 3");       // 2010-02-03T00:00:00+01:00
testMoment("2010 February 03"); // 2010-02-03T00:00:00+01:00
testMoment("2010 February 3");  // 2010-02-03T00:00:00+01:00
testMoment("2010 02 03 04");    // 2010-02-03T04:00:00+01:00
// etc...