当我使用变量而不是整数或字符串时,为什么初始化日期对象会失败?

时间:2016-03-08 07:42:50

标签: javascript date

我正在尝试创建一个新的日期对象,初始化为从另一个函数传入的日期。该计划不会提前知道所需的日期,但我们假设日期是2017年1月1日。

成功:

var newYear = new Date(2017, 0, 1);
Logger.log(newYear.toISOString());
//logs 2017-01-01T08:00:00.000Z

不成功:

var date = "2017, 0, 1";
var newYear = new Date(date);
Logger.log(newYear.toISOString());
//throws "Error, date range is invalid."

不成功:

var date = "2017-0-1";
var newYear = new Date(date);
Logger.log(newYear.toISOString());
//throws "Error, date range is invalid."

编辑:就在发布之前我想出来了。我希望没有人介意我发布和回答我自己的问题 - 也许你可以更好地回答它!

1 个答案:

答案 0 :(得分:2)

即使字符串看起来像是用逗号分隔的一系列整数,即使Javascript是一种松散类型的语言,它们也不一样。

解决方案:

var year = 2017;
var month = 0; //don't forget months go from 0-11
var day = 1;
var newYear = new Date(year, month, day);
Logger.log(newYear.toISOString());
//logs 2017-01-01T08:00:00.000Z

以" 2017-03-04":

的形式解析日期
var givenDate = "2017-3-04"
var date = givenDate.split("-");
var Year = date[0];
var Month = date[1]-1; 
var Day = date[2];
var newYear = new Date(Year, Month, Day);
Logger.log(newYear.toISOString()); 
//logs 2017-01-01T08:00:00.000Z

注意:要在本地时区输出日期,而不是" toISOString()",它将时间报告为GMT / ISO时间(在大多数浏览器上),您可以使用" toDateString()一致"输出更易读的形式,反映您当地的时区。