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。主要问题是我不确定接收字符串的格式。