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
。
编辑
未提及:在我的例子中,我不知道以哪种格式获取日期字符串。它可以是 year
、year month
、year month day hours
等。我要问的是如何将字符串格式化为日期,所有未知值将是:01 for days and months
、00 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...
我想将 '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
。
编辑
未提及:在我的例子中,我不知道以哪种格式获取日期字符串。它可以是 year
、year month
、year month day hours
等。我要问的是如何将字符串格式化为日期,所有未知值将是:01 for days and months
、00 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...