Javascript如何解析日期为零的年份字符串

Javascript如何解析日期为零的年份字符串,javascript,date,datetime,momentjs,Javascript,Date,Datetime,Momentjs,我想将'2015'字符串解析为日期 问题是,由于冬季的时间和时区,它会调整一个小时。 是否有可能获得: 2010年1月1日星期五00:00:00当我做新日期(“2010”)或时刻(“2010”) 在下列情况下: 2010年1月1日星期五01:00:00 GMT+0100(西欧标准时间) 我希望时间总是00:00 编辑 未提及:在我的例子中,我不知道以哪种格式获取日期字符串。它可以是year,year-month,year-month-day-hours等等。我要问的是如何格式化字符串到日期,所有

我想将
'2015'
字符串解析为
日期

问题是,由于冬季的时间和时区,它会调整一个小时。 是否有可能获得:

2010年1月1日星期五00:00:00
当我做
新日期(“2010”)
时刻(“2010”)

在下列情况下:

2010年1月1日星期五01:00:00 GMT+0100(西欧标准时间)

我希望时间总是
00:00

编辑


未提及:在我的例子中,我不知道以哪种格式获取日期字符串。它可以是
year
year-month
year-month-day-hours
等等。我要问的是如何格式化字符串到日期,所有未知值将是:
01表示天和月
00表示小时和分钟

您可以在构造函数中这样设置此信息:

new Date(2010, 0); // params: year, month
或者,如果需要从字符串创建日期:

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

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

注意:当您执行
new Date()
时,您也将获得
时间
,但当执行
新日期(yyyy,mm,dd)
时,不会添加时间,并且时间始终为
00:00

函数createYearStartDate(年){
返回新日期(年份,0,1);
}
(功能(){
var d1=createYearStartDate(“2010”)
控制台日志(d1)

})()
使用
力矩
您可以:

moment("2015", "YYYY");
// 2015-01-01T00:00:00+01:00
moment.utc("2015", "YYYY");
// 2015-01-01T00:00:00+00:00
如果您需要使用当地时间,而如果您想使用,您可以:

moment("2015", "YYYY");
// 2015-01-01T00:00:00+01:00
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(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...

可能的问题是,我不知道确切的格式,我得到的是什么,例如,我可以得到,
“2010年2月”
@Edgar我已经更新了我的答案,以便管理多种格式。我在相当通用的组件中使用它,一旦它可以接收字符串,如
“2004”
,然后
“2001 01 02”
等。我只得到带日期的字符串,没有格式类型。是否有一组有限的可能输入格式?我知道您可以收到不同的格式,但这可能会引起您的问题:应该如何解释
2001 01 02
?它可以是2001年2月1日和2001年1月2日(它总是像:
年-月-日-小时-分钟…
,只是不总是完整的数据不确定它到底做什么新的日期(年+“/1”);,但它可以工作。谢谢you@Edgar-它“工作”纯属偶然。它创建了一个类似“2010/1”的字符串,这不是一个简单的问题,所以实现可能会退回到他们喜欢的任何解析算法,包括将其视为无效字符串并返回无效日期。@新更改的问题是它将支持
“2010 02”
string.date。主要问题是我不确定接收字符串的格式。