解释:
我认为没有实际问题。
混淆源于1 是从去年开始的这一周。
如果你console.log 的所有日期都是从26th of December 2020 到12th of January 2021:
function myFunction() {
const December = [26,27,28,29,30,31];
const January =[1,2,3,4,5,6,7,8,9,10,11,12,13];
December.
forEach(n=>{console.log(Utilities.formatDate(new Date(2020,11,n), "Europe/Amsterdam", "yyyy-MM-dd"),"Week: ",
Utilities.formatDate(new Date(2020,11,n), "Europe/Amsterdam", "w"))});
January.
forEach(n=>{console.log(Utilities.formatDate(new Date(2021,0,n), "Europe/Amsterdam", "yyyy-MM-dd"),"Week: ",
Utilities.formatDate(new Date(2021,0,n), "Europe/Amsterdam", "w"))});
}
你会得到这些结果:
2020-12-26 Week: 52
2020-12-27 Week: 1 // Sunday
2020-12-28 Week: 1
2020-12-29 Week: 1
2020-12-30 Week: 1
2020-12-31 Week: 1
2021-01-01 Week: 1
2021-01-02 Week: 1
2021-01-03 Week: 2 // Sunday
2021-01-04 Week: 2
2021-01-05 Week: 2
2021-01-06 Week: 2
2021-01-07 Week: 2
2021-01-08 Week: 2
2021-01-09 Week: 2
2021-01-10 Week: 3 // Sunday
2021-01-11 Week: 3
2021-01-12 Week: 3
2021-01-13 Week: 3
基本上,1st 周从去年的 2020-12-27 开始,2nd 周从 2021-01-03 开始,3rd 周从 2021-01-10 开始,因此根据该逻辑,当前周是 3是你得到的数字。
解决方法:
如果你想调整这个逻辑,你可以从当前周数中减去1,得到2作为当前周数:
var today = new Date();
var week = Utilities.formatDate(today, "Europe/Amsterdam", "w") - 1;
或者您可以使用这个answer 并调整周数:
function exampleFunction() {
Date.prototype.getWeek = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7)-1;
}
var now = new Date();
Logger.log(now.getWeek());
}
唯一的问题是明年的第一周(也可能是今年)将有0 周数。但是您可以使用if 条件对其进行调整,以确保它不会发生。