在Google Script中,我有以下代码:
// year: 30-12-2015
// weekyear: 30-12-201**6**
// week: 1
当我将30-12-2015作为日期插入时,结果将为。
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"));
在我当地的时区,应该是第53周。不是1。 如果我calculate the week in ISO 8601,则结果为52。
奇怪,不是吗?编辑: 使用此代码进行新尝试
// 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.
这导致
{{1}}
错误的一周是错误。
答案 0 :(得分:2)
Utilities.formatDate documentation表示它使用Java SimpleDateFormat - 我觉得这可能是问题的原因,因为它们是Locale敏感的,我会猜测它将使用默认的美国语言环境(我不要不认为传递时区会改变语言环境。问题是美国区域设置日历包含getFirstDayOfWeek() = 1 (SUNDAY)
和getMinimalDaysInFirstWeek() = 1
。对于ISO 8601,您需要分别设置2和4。如果您想要工作一周,我认为您最好坚持使用链接到的Javascript代码。
答案 1 :(得分:1)
new Date()
将接受一些不同的参数配置,但您仍需要确保参数正确。您不能只将任何内容插入new Date()
如果变量已经是日期类型,那么使用new Date()
就没有意义了。您可以使用typeof
来测试数据类型。
var dateFromSheet = sheet.getRange(3,1).getValue();
Logger.log('type of data: ' + typeof dateFromSheet);
如果数据类型是字符串,则它必须是有效的日期字符串格式。有几种不同的格式。但是,再次,您需要使用有效的格式。