计算谷歌脚本中的日期属于哪个支付期

时间:2016-05-11 17:43:33

标签: javascript forms google-apps-script

我有一个Google表单,要求用户输入PTO请求。我正在编写一个脚本来计算PTO开始的支付期。我试图在其他线程上复制类似问题的答案,但我的代码不起作用。我有以下几个片段:

var FIRST_PAY_PERIOD = new Date("5/01/2016"); //Sunday of First pay period
var MILLISECONDS_IN_DAY = 86400000;

function SheetHandler(sheet) {
    var _sheet = sheet;
    var _data = getRowsData(_sheet);

    var _markPending = function(d) {

    d.state = PENDING_STATE;
    d.identifier = Utils.generateUUID();

    var startOfLeave = Date(d.leaveStartDate);

    var payPeriod = FIRST_PAY_PERIOD + (Math.floor(((startOfLeave - FIRST_PAY_PERIOD) / MILLISECONDS_IN_DAY)/14) * 14);

    Logger.log("First Pay Period " +FIRST_PAY_PERIOD);
    Logger.log("Start of Leave " +startOfLeave);
    Logger.log ("Delta " +(startOfLeave - FIRST_PAY_PERIOD));
    Logger.log("Pay Period " +payPeriod);

    d.payPeriod = payPeriod;

记录器输出如下:

[16-05-11 10:28:10:914 PDT]第一个支付期Sun 2016年5月1日00:00:00 GMT-0700(PDT)

[16-05-11 10:28:10:915 PDT]开始休假2016年5月11日星期三10:28:10 GMT-0700(PDT)

[16-05-11 10:28:10:916 PDT] Delta NaN

[16-05-11 10:28:10:917 PDT]支付期间2016年5月1日00:00:00 GMT-0700(PDT)NaN

代码问题 - 为什么我将“NaN”作为两个日期之间的差异? 形成问题 - 如何将计算的支付期间写为“05/15/2016”?

2 个答案:

答案 0 :(得分:0)

为startOfLeave的原始代码添加一个新内容

var startOfLeave = new Date(d.leaveStartDate);

Date()本身会忽略参数,只是为您提供当前日期,时间和时区的字符串。它正在尝试对生成所有NaN的字符串进行数学运算。

答案 1 :(得分:0)

感谢各种海报的帮助。我接受了每个人的意见,并提出了以下有效的方法:

var FIRST_PAY_PERIOD = new Date("5/01/2016"); //Sunday of First pay period

var startOfLeave = new Date(d.leaveStartDate);

var firstPayPeriodSecs = FIRST_PAY_PERIOD.getTime();

var ptoDurationSecs = (Math.floor(((startOfLeave - FIRST_PAY_PERIOD) / MILLISECONDS_IN_DAY)/14) * 14 * MILLISECONDS_IN_DAY);

var payPeriod = new Date(firstPayPeriodSecs + ptoDurationSecs);