2016-05-11 6 views
0

Ich habe ein Google-Formular, das Benutzer auffordert, PTO-Anfragen einzugeben. Ich schreibe ein Skript, das berechnet, in welchem ​​Bezahlzeitraum der PTO startet. Ich habe versucht, Antworten auf ähnliche Fragen auf andere Threads zu kopieren, aber mein Code funktioniert nicht. Ich habe folgende Schnipsel:Berechnen, in welchem ​​Bezahlzeitraum ein Datum in Google-Skript fällt

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; 

Die Logger Ausgabe wird wie folgt dar:

[16-05-11 10: 28: 10: 914 PDT] Erster Pay Zeitraum Sun 1. Mai 2016 00.00 Uhr: 00 GMT-0700 (PDT)

[16-05-11 10: 28: 10: 915 PDT] Anfang des Leave Mi 11. Mai 2016 10.28.10 GMT-0700 (PDT)

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

[16-05-11 10: 28: 10: 917 PDT] Bezahlzeitraum So May 01 2016 00:00:00 GMT-0700 (PDT) NaN

Code Frage - warum bekomme ich "NaN" als das Delta zwischen den 2 Daten? Frage formulieren - wie schreibe ich die berechnete Bezahlfrist als nur "15.05.2016" aus?

+0

sind Sie sicher, dass die 'NaN' ist immer noch da, nachdem Sie eingewickelt' (startOfLeave - FIRST_PAY_PERIOD) 'in Pars? Das wäre der Fehler, wenn Sie diese Subtraktion nicht in Parens eingepackt hätten. – pherris

+0

Wie lauten die Datentypen der Variablen 'FIRST_PAY_PERIOD' und' startOfLeave'? 'Logger.log (" typeof startOfLeave: "+ typeof startOfLeave);' Führen Sie den Code aus und wählen Sie im VIEW-Menü LOGS. –

+0

Ja, der Ausgang ist wie gezeigt mit dem Code wie gezeigt. Ich sehe das NaN sowohl in der Logger-Ausgabe als auch wenn es in die Tabelle zurückgeschrieben wird –

Antwort

0

ein neue zu Ihrem ursprünglichen Code für startOfLeave hinzufügen

var startOfLeave = new Date(d.leaveStartDate); 

Date() selbst Argumente ignoriert und gibt Ihnen nur einen String der aktuellen Datum, Uhrzeit und Zeitzone. Es versucht, die Saite zu berechnen, die alle NaN erzeugt.

+0

Danke. Das hat den ersten Teil des Problems behoben.Aber jetzt merke ich, dass (Math.floor (((startOfLeave - FIRST_PAY_PERIOD)/MILLISECONDS_IN_DAY)/14) * 14) gibt die ganze Zahl der Tage FIRST_PAY_PERIOD hinzufügen. Wie wandle ich diese Zahl in ein Format um, damit sie korrekt zu FIRST_PAY_PERIOD hinzugefügt werden kann, um die korrekte Abrechnungsperiode zu erhalten? –

+0

ich inkrementiere date objects von neues Datum (old_date.valueOf() + delta_in_milliseconds) –

+0

Doing das würde im Grunde alle die Mathematik rückgängig machen, die Sie getan haben und Ihnen etwas sehr nah an startOfLeave geben. Wenn die Antwort 3 ist, wenn der Urlaub in der dritten Zahlungsperiode beginnt, löschen Sie die * 14 aus Ihrer Mathematik. Kann immer noch um eins abweichen, abhängig davon, was genau Sie wollen und wie Sie Ihre Zahlungsfristen festlegen. –

0

Danke für die Hilfe von den verschiedenen Plakaten. Ich nahm jeden Eingang und kam mit dem Follow-up, die funktioniert:

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); 
Verwandte Themen