在此示例代码中,将字符串转换为日期:
function stringToDate(){
var edate = "2015-06-01";
Logger.log(edate);
var input = edate.split('-');
var date = new Date();
date.setUTCFullYear(input[0],input[1] - 1,input[2]);
Logger.log(date);
}
记录日期返回“Mon Jun 01 20:07:45 GMT + 01:00 2015”,这是正确的,因为月份'06' - 1 = 5对应于6月份。
然而,这几乎是相同的功能:
function stringToDate2(){
var edate = "2015-06-01";
Logger.log(edate);
var input = edate.split('-');
var date = new Date();
date.setUTCFullYear(input[0]);
date.setUTCMonth(input[1] - 1);
date.setUTCDate(input[2]);
Logger.log(date);
}
返回“Wed Jul 01 20:10:04 GMT + 01:00 2015”。其他一些值会返回同样棘手的结果。为什么我为'setUTCMullYear'获得'setUTCMonth'的不同结果?
答案 0 :(得分:3)
设置月份前的日期
date.setUTCFullYear(input[0]);
date.setUTCDate(input[2]);
date.setUTCMonth(input[1] - 1);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth
如果您指定的参数超出预期范围, setUTCMonth()尝试更新日期中的日期信息 相应的对象。例如,如果你使用15作为monthValue,那么 year将增加1,而3将用于月份。
每个UTC函数都有一个关于超出范围值的类似注释。
因此:
new Date()
获取当前日期,因此今天 5/31 日期 31 。
有几个月没有第31个日期,因此31超出了日期范围,因此会相应更新。
因此,如果您尝试设置二月份的月份而不先更改日期, 该日期将是2015年2月31日,但今年2月只有28天,所以它将翻到2015年3月3日
在您的情况下,如果您尝试将其设置为6月,2015年6月31日,则6月永远不会有第31个日期,所以它再次滚动到2015年7月1日。等等。
首先像我上面所示更改日期,或者在创建时设置默认日期:
new Date("01/01/2015")