Date 在谷歌应用程序脚本中处理日期
我想做的是——我只想给出每周工作日的指数 因此,如果在一周内,周一和周三是假日,那么周二应该是1,周四应该是2,周五应该是指数3。否则,在没有任何假期的正常一周中,周一应为1,周二2,周三3,依此类推 这是我写的代码(我已经好几年没有编写代码了,所以请原谅这种粗糙的方法)Date 在谷歌应用程序脚本中处理日期,date,google-apps-script,Date,Google Apps Script,我想做的是——我只想给出每周工作日的指数 因此,如果在一周内,周一和周三是假日,那么周二应该是1,周四应该是2,周五应该是指数3。否则,在没有任何假期的正常一周中,周一应为1,周二2,周三3,依此类推 这是我写的代码(我已经好几年没有编写代码了,所以请原谅这种粗糙的方法) 工作表“假日”在第2行开始的B列中包含假日列表 变量date是我要查找其索引的日期 变量DayOfWeek是从上周日开始计算的“日期”天数,因此如果date是周一,DayOfWeek是1;如果date是星期二,dayofwee
“假日”
在第2行开始的B列中包含假日列表date
是我要查找其索引的日期DayOfWeek
是从上周日开始计算的“日期”天数,因此如果date
是周一,DayOfWeek
是1;如果date
是星期二,dayofweek
是2,依此类推函数IndexOfWorkDayOfWeek(日期、星期几、最后星期日)
{
var activeSheet=SpreadsheetApp.getActiveSpreadsheet();
var activeCell=activeSheet.getActiveRange();
var activeRow=activeCell.getRowIndex();
var activeColumn=activeCell.getColumn();
var计数=1;
对于(var j=1;j
我认为问题有两个方面:
date2
计算不起作用(var date2=lastSundayDate.valueOf()+j*86400;
)holidayOrNot
返回false,无论发生什么情况,即使遇到假日。。。由于某种原因,条件date2==listOfHolidays[k]
不起作用谢谢你的帮助 假设
lastSundayDate
被正确传递,我发现了一个明显的问题:
lastSundayDate.valueOf()
日期对象上的valueOf()
返回原语值。。。看起来你打算在日期上加上一天(86400秒*j)?我不知道这里的逻辑是什么。但是valueOf()
date2肯定会给您一个类似于以下内容的整数:138462769399
(请参阅)
您真正想要完成的是类似于Date.getDay()
,或者类似的功能,以便您可以在原始日期中添加小时、天等。这可能是你所有问题的根源
您可以做的是读取on Date对象以查看所有有关日期的函数及其用法。通过使用这些函数,您可以大大简化所做的工作,而不是执行抽象操作,如j*86400
还应注意,您可以执行以下简单操作,将当前日期(时间)增加4小时:
其中给出了以下内容:
[13-11-16 14:13:38:947 EST] Sat Nov 16 14:13:38 GMT-05:00 2013
[13-11-16 14:13:38:954 EST] Sat Nov 16 18:13:38 GMT-05:00 2013
处理日期可能很棘手,但最好使用最简单的方法,这些方法都内置在日期对象本身中。还有许多其他库为日期提供扩展功能,例如
如果您在尝试使用上面显示的方法后仍然遇到问题,请运行脚本并发布执行记录和记录器的内容,以便我可以帮助您缩小问题范围:)也许下面的方法可以帮助您进行计算,它返回一个与一年中的某一天相对应的整数,因此,如果您将其应用于节假日,并将其与感兴趣的天数进行比较,则这可能是找到匹配项的一个好方法 在这里,只需在脚本中的任何函数之外添加这些行(这样您就可以在任何地方使用它),然后像这样使用它:
var d = new Date().getDOY();
Logger.log(d)
以下是方法:
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
}
1.
lastSundayDate
在哪里定义?2.如果未正确定义lastSundayDate
,则代码的其余部分可能会中断。好吧,至少你在问题中提到的所有要点。。。我的建议是显示包含所有变量定义的所有代码,并可能从脚本编辑器发布执行记录的结果,或者发布详细日志记录的输出。lastSundayDate是传递给函数的参数之一。它包含最后一个星期日的日期,即开始一周的星期日。我将发布执行脚本和日志。这实际上是一个非常有用的原型添加:)我认为我的答案解释了他的问题的根源,但你的答案给出了一个非常简单的解决方案-考虑到他对日期所做的工作量,他应该使用这个解决方案。非常感谢你提供的详细答案,但我找到了解决办法。有两个问题:传递给函数的日期是字符串而不是日期,因此我创建了日期对象并传递这些字符串以转换为正确的日期格式。其次,valueOf函数给出了自1970年1月1日以来的精确毫秒数,因此要在日期上添加一天,我所要做的就是在传递的日期上添加24*3600*1000毫秒。现在,程序运行得完美无缺:)那么我在回答中说的对吗?我最初的假设是,lastSundayDate
没有被正确地传递(这是一个字符串)<
var d = new Date().getDOY();
Logger.log(d)
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
}