Utilities.formatDate日期未设置正确

时间:2014-04-04 10:39:10

标签: google-apps-script

我的日期存储如下:

existingDate = Wed Apr 30 2014 00:00:00 GMT+0100 (BST)

当我使用Utilities.formatDate格式化日期更改为前一天的日期时。

var formattedDate = Utilities.formatDate(new Date(existingDate), "GMT", "dd/MM/yyyy");

然后将格式化日期设置为29/04/2014 30/04/2014

是否有其他人看到过这种行为。

2 个答案:

答案 0 :(得分:2)

Utilities.formatDate似乎工作正常。

你有4月30日午夜的 GMT-1 ,但是你告诉它在不同的时区 GMT 格式化这个日期,或者更明确的格式GMT-0。预期结果确实是4月29日23h。

Utilities.formatDate中的第二个参数必须是您想要的时区。

答案 1 :(得分:1)

此google脚本还存在其他一些问题。 如果我想要时区AEST但只有日期为2017年1月27日,那么Utilities.formatDate(“1/27/2017”,“AEST”,“yyyy-MM-dd”)将返回一个值2017-01-26,应该是前一天!但是,如果我有时间,如“1/27/2017 12:00:00”,那么它将返回正确的一天。但是,如果我使用“GMT + 11”作为时区,即使没有时间,如果返回正确的一天。

示例 -

Logger.log('Example 1='+Utilities.formatDate(new Date("1/27/2017"),"AEST","yyyy-MM-dd")); Logger.log('Example 2='+Utilities.formatDate(new Date("1/27/2017 12:00:00"),"AEST","yyyy-MM-dd")); Logger.log('Example 3='+Utilities.formatDate(new Date("1/27/2017"),"GMT+11","yyyy-MM-dd"));

输出 -

示例1 = 2017-01-26

示例2 = 2017-01-27

示例3 = 2017-01-27

从没有时间的电子表格单元格中读取日期时的解决方法是添加时间,以及何时使用“AEST”或类似的时区,如下所示 -

var displayDate = sheet.getRange(a1Notation).getDisplayValue();  // Not .getValue();
Logger.log(Utilities.formatDate(new Date(displayDate + " 12:00:00"), "AEST", "yyyy-MM-dd"));

然而,“GMT + 11”会更容易,因为您不需要添加时间。