Javascript Utilities.formatDate从第7天开始一周,而不是从第1天开始
Javascript Utilities.formatDate从第7天开始一周,而不是从第1天开始,javascript,date,datetime,google-apps-script,google-sheets,Javascript,Date,Datetime,Google Apps Script,Google Sheets,根据其文档,其工作原理如下。 您可以很容易地看出,本周将从周一开始,即第1天。 为什么我的一周从周日开始,即使它显然是作为第7天输出的 函数testDate(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=ss.getSheetByName(“历史”); var扩展=2; var arrayDates=sheet.getRange(3,2,扩展名).getValues(); //展平阵列 函数展平(tdArray){retu
根据其文档,其工作原理如下。
您可以很容易地看出,本周将从周一开始,即第1天。
为什么我的一周从周日开始,即使它显然是作为第7天输出的
函数testDate(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“历史”);
var扩展=2;
var arrayDates=sheet.getRange(3,2,扩展名).getValues();
//展平阵列
函数展平(tdArray){return[].concat.apply([],tdArray);}
var arrayDates=扁平化(arrayDates);
//从日期中“提取”周数
var arrayWeekNums=arrayDates.map(函数(el){return Utilities.formatDate(el,“CET”,“uyww”);});
//CET=中欧时间
//u=一周中的某一天;
//y=年,以4位数字表示;
//ww=两位数的周数
Logger.log(arrayWeekNums);
Logger.log(arrayDates);
}
//Logger.log(arrayWeekNums);
// [7201803, 6201802]
//7-2018-03周日:7;年份:2018年;周数:03 ;;
//6-2018-02周日:6;年份:2018年;周数:02??
//Logger.log(arrayDates);
//[20-01-11 22:21:54:187 CET][Sun Jan 14 00:00:01 GMT+01:00 2018,Sat Jan 13 23:59:59 GMT+01:00 2018]
我还将项目的全球设置从美国切换到了任何欧洲国家:没有任何变化。我怎样才能改变这个 根据请求编辑:
1.“Importazioni internazionali”又名电子表格时区(文件>电子表格设置>区域设置),此时为“意大利”,但即使是“美国”,结果也是一样的 2.脚本时区(文件>项目设置):“GMT+01:00-巴黎” 电子表格副本:
我认为这不是语言环境或时区设置的问题 我在不同的时间点运行脚本,这就是我发现的 似乎一周中的某一天(dotw)和一年中的某一周(woty)的数字没有关联 在任何一年中,第一周都不会在该年的第一个星期一开始 Dotw严格来说是Mon=1,Tue=2,等等 沃蒂很狡猾 似乎一年有53周,只要第53周可以在12月31日前完成 否则一年将有52周。下一年的“第一周”将从上一年的12月开始 例如,2016年在第53周结束。2017年从“第一周”开始: 但2017年,由于第53周无法在年底前完成,2017年12月31日是2018年的“第一周”: 与2019-20年类似,第52周于19年12月28日结束。2020年“第一周”于19年12月29日开始:
Date Doty Dotw Woty
27-Dec-2019 361 5 52
28-Dec-2019 362 6 52
29-Dec-2019 363 7 1
30-Dec-2019 364 1 1
31-Dec-2019 365 2 1
01-Jan-2020 1 3 1
02-Jan-2020 2 4 1
03-Jan-2020 3 5 1
04-Jan-2020 4 6 1
编辑 我尝试了几个时间段,包括:
new Date(0) => Thu Jan 01, 1970
及
据我所知,woty在星期天改变。但dotw在周一重置为1。作为7的倍数,它们保持这个循环
因此,最好的解释似乎是,两个不相连,除了它们的7天周期被一天抵消
这是新一周的开始
- 在
从周一到周日循环,周一=1工作日的上下文中
- 在一年中的
(1到52或53)的上下文中,循环通过周日到周一,新周数从 星期天周数
arrayDates
what's 1.电子表格时区(文件>电子表格设置>区域设置)和2.脚本时区(文件>项目设置)的内容是什么?3.提供Logger.log(arrayDates)
尝试将时区更改为任意一个。在相同的偏移(例如阿姆斯特丹和拉各斯在+0100)中可能的不同区域可能考虑不同的日子,如第1天。另外,它应该是CET
而不是ECT
。请共享一份您的电子表格。@Tedinoz完成,电子表格添加;校长:我已经按照你的建议试过了,但是没有什么改变。这是真的:我把CET和ECT弄错了,也改变了,但到目前为止没有区别。谢谢我想我明白你的意思,但那不是问题的关键。以2018年为例,这是我的剧本之年:一年的第一天是星期一,因此2018年的第一周恰好开始于2018年1月1日星期一,而不是2017年12月31日星期日,正如您在第二张表格中所写。这就是问题的关键:为什么一年中的第一天是星期一,甚至我所在的地区设置为欧洲国家和时区,一周都从星期天开始?如果我错了,请纠正我,谢谢你的回答。我已经在回答中添加了更多的细节。我认为这是一个“事情就是这样”的问题好的,谢谢。让我试着向谷歌提出这个问题,看看他们在投票前是否有话要说。谢谢
Date Doty Dotw Woty
27-Dec-2019 361 5 52
28-Dec-2019 362 6 52
29-Dec-2019 363 7 1
30-Dec-2019 364 1 1
31-Dec-2019 365 2 1
01-Jan-2020 1 3 1
02-Jan-2020 2 4 1
03-Jan-2020 3 5 1
04-Jan-2020 4 6 1
new Date(0) => Thu Jan 01, 1970
new Date(0, 0, 0) => Sat Dec 30, 1899 (?!)