在 Google 脚本中,我有以下代码:
var myDate = new Date(sheet.getRange(3,1).getValue());
var year = Utilities.formatDate(myDate, "Europe/Amsterdam", 'dd-MM-yyyy');
var weekyear = Utilities.formatDate(myDate, "Europe/Amsterdam", 'dd-MM-YYYY');
var week = Utilities.formatDate(myDate, "Europe/Amsterdam", 'w');
当我插入 30-12-2015 作为日期时,结果将是。
// year: 30-12-2015
// weekyear: 30-12-201**6**
// week: 1
在我本地的时区,它应该是第 53 周。而不是 1。 如果我calculate the week in ISO 8601 ,结果是52。
很奇怪,不是吗?
编辑: 新的尝试,使用此代码
var cursus_datum = sheet.getRange(3,1).getValue();
Logger.log('type of data: ' + typeof cursus_datum);
Logger.log(cursus_datum);
Logger.log(Utilities.formatDate(cursus_datum, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "d-MM-y HH:mm"));
Logger.log(Utilities.formatDate(cursus_datum, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "w"));
这会导致
// type of data: object
// Wed Dec 30 09:00:00 GMT+01:00 2015
// 30-12-2015 00:00 which is perfect
// 1 which is **not** correct.
错误的周是错误。
最佳答案
Utilities.formatDate documentation声明它使用 Java SimpleDateFormat - 我有一种感觉这可能是问题的原因,因为它们对区域设置敏感,我猜测它将使用默认的美国区域设置(我不认为传入时区会改变语言环境)。问题是美国区域设置日历有 getFirstDayOfWeek() = 1 (SUNDAY)
和 getMinimalDaysInFirstWeek() = 1
。对于 ISO 8601,您分别需要设置 2 和 4。我认为如果您想使用周年,最好坚持使用链接到的 Javascript 代码。
关于google-apps-script - Utilities.formatDate 返回错误的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204388/