Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在谷歌应用程序脚本中处理日期_Date_Google Apps Script - Fatal编程技术网

Date 在谷歌应用程序脚本中处理日期

Date 在谷歌应用程序脚本中处理日期,date,google-apps-script,Date,Google Apps Script,我想做的是——我只想给出每周工作日的指数 因此,如果在一周内,周一和周三是假日,那么周二应该是1,周四应该是2,周五应该是指数3。否则,在没有任何假期的正常一周中,周一应为1,周二2,周三3,依此类推 这是我写的代码(我已经好几年没有编写代码了,所以请原谅这种粗糙的方法) 工作表“假日”在第2行开始的B列中包含假日列表 变量date是我要查找其索引的日期 变量DayOfWeek是从上周日开始计算的“日期”天数,因此如果date是周一,DayOfWeek是1;如果date是星期二,dayofwee

我想做的是——我只想给出每周工作日的指数

因此,如果在一周内,周一和周三是假日,那么周二应该是1,周四应该是2,周五应该是指数3。否则,在没有任何假期的正常一周中,周一应为1,周二2,周三3,依此类推

这是我写的代码(我已经好几年没有编写代码了,所以请原谅这种粗糙的方法)

  • 工作表
    “假日”
    在第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);
    }