Javascript 如何解析年份字符串到零时间的日期

Javascript how to parse year String to date with zero time

本文关键字:零时 时间 日期 字符串 何解析 Javascript      更新时间:2023-09-26

我想解析'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");

使用moment您可以拥有:

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

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

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

评论后编辑

您可以使用一系列格式使用时刻解析:

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...

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

注意:当你做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)
})()