我有一个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”?
答案 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);