使用Utilities.formatDate

时间:2018-01-03 23:23:29

标签: javascript date google-apps-script simpledateformat date-formatting

使用Utilities.formatDate()

转换日期时会产生好奇的结果
function test_date_conversion_1() {
    var in_d_str = "12/31/2017"
    var new_d = Utilities.formatDate(new Date(in_d_str), "EET", "MM/dd/YYYY")
    return new_d
} 
// new_d = "12/31/2018"  2018?!

我尝试开发补丁并为此功能获得意外结果

function test_date_conversion(offset) {
    //offset = 1
    var in_d_str = "12/31/2017"
    var in_d = new Date(in_d_str)
    var in_d_epoch = in_d.getTime()
    var in_d_epoch_dep_1 = in_d_epoch+offset
    var in_d_d_dep_1 = new Date(in_d_epoch_dep_1)
    var new_d = Utilities.formatDate(in_d_d_dep_1, "EET", "MM/dd/YYYY")
}

如果offset = 1则new_d =“12/31/2018”

如果offset =( - 1)则new_d =“12/30/2017”

所以1毫秒= 1年?

EET = GMT + 2 =脚本时区

工作表时区= GMT + 3

来自调试器的

我注意到日期被Utilities.formatDate()破坏了

我已经完成了+/- 1小时,+ / - 1小时+/- 1秒的偏移,但从2017年12月31日起仍然无法从12/31进行。

我已经像这样打补丁了

if (new_d == "12/31/2018")
    new_d = "12/31/2017";

但寻找可靠的解决方案。 谢谢你的回答。

1 个答案:

答案 0 :(得分:2)

formatDate(date, timeZone, format)的第三个参数是

  

SimpleDateFormat 规范

的格式

对于SimpleDateFormat,您在一周中使用Y,在一年中使用y。由于12/31/2017周是2018年的第一周,因此将显示为2018年。

不使用"MM/dd/YYYY",而是使用"MM/dd/yyyy"