google-apps-script - Utilities.formatDate 返回错误的周数

标签 google-apps-script

在 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/

相关文章:

caching - GSCRIPT - 如何缓存 HTML 页面内容?

google-apps-script - 如何使用语法一次重命名 Google Drive 中的多个文件?

google-apps-script - 将 google 脚本项目从电子表格复制到另一个

google-apps-script - 您可以将 UrlFetchApp 转换为 Apps 脚本中的 promise 吗?

google-apps-script - 如何在谷歌脚本编辑器中的1到30(31,按月)单元格中自动设置整个月的日期和天数?

javascript - 如何让触发器在复制的电子表格+脚本中工作?

javascript - 使用 Xml.parse() 删除标签内容与值数组匹配的 html 标签和内容

javascript - 带有 PASTE_COLUMN_WIDTHS 选项的 Google 脚本复制功能不起作用

google-apps-script - 当我在 GAS 中出现 "sleep"时会发生什么? (执行时间限制解决方法)

javascript - 如何更新 Google 中现有文件夹的访问权限