我的日期存储如下:
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
。
是否有其他人看到过这种行为。
答案 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”会更容易,因为您不需要添加时间。