HDC*_*rus 2 javascript google-apps-script
在此将字符串转换为日期的示例代码中:
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);
}
Run Code Online (Sandbox Code Playgroud)
记录日期返回“Mon Jun 01 20:07:45 GMT+01:00 2015”,这是正确的,因为月份 '06' - 1 = 5 对应于六月的月份。
但是,这个几乎相同的功能:
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);
}
Run Code Online (Sandbox Code Playgroud)
返回“2015 年 7 月 1 日星期三 20:10:04 GMT+01:00”。其他一些值返回同样糟糕的结果。为什么“setUTCMonth”和“setUTCFullYear”得到不同的结果?
在月份之前设置日期
date.setUTCFullYear(input[0]);
date.setUTCDate(input[2]);
date.setUTCMonth(input[1] - 1);
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth
如果您指定的参数超出预期范围,则 setUTCMonth() 会相应地尝试更新 Date 对象中的日期信息。例如,如果您将 15 用于月份值,则年份将增加 1,月份将使用 3。
每个 UTC 函数都有关于超出范围值的类似说明。
所以因为这个:
new Date()获取当前日期,因此今天是5/31日期是31。
有些月份没有 31 号日期,因此 31 号不在日期范围内,因此会相应地更新。
因此,如果您尝试将月份设置为 2 月而不先更改日期,则日期将为 2/31/2015,但 2 月今年只有 28 天,因此它会滚动到 3/03/2015
在您的情况下,如果您尝试将其设置为 2015 年 6 月 31 日,则 6 月永远不会有第 31 天,因此它会再次滚动到 2015 年 1 月 7 日。等等。
因此,首先像我上面显示的那样更改日期,或者在创建它时设置默认日期:
new Date("01/01/2015")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |