2016-05-22 14 views
0

Ich bin ziemlich neu, also Entschuldigung, wenn die Antwort offensichtlich ist.Tage hinzufügen - Google Scripts

Ich versuche, Tage vom heutigen Datum hinzuzufügen und zu subtrahieren. Die Idee ist schließlich, das Datum von nächsten Montag und letzten Montag zu berechnen.

Ich habe here geschaut, die mein erstes Problem gelöst hat, aber das nächste verwirrt mich: Subtrahieren Tage vom heutigen Datum funktioniert ohne Problem. Hinzufügen gibt ein ungültiges Datum an.

Der Code ist:

function findDate() { 
    var d = new Date(); 
    var n = d.getDay(); 
    var makeDate = new Date(d.setDate(d.getDate())); 
    Logger.log(makeDate) 
    var weekDaysTo = new Array(7); //array of days to following Monday 
    weekDaysTo[0]= 1 
     weekDaysTo[1] = 7 
     weekDaysTo[2] = 6 
     weekDaysTo[3] = 5 
     weekDaysTo[4] = 4 
     weekDaysTo[5] = 3 
     weekDaysTo[6] = 2 

    Logger.log('weekDaysTo gives '+weekDaysTo[n]) 

    var weekDaysFrom = new Array(7); //array of days to previous Monday 
     weekDaysFrom[0]= 6 
     weekDaysFrom[1] = 0 
     weekDaysFrom[2] = 1 
     weekDaysFrom[3] = 2 
     weekDaysFrom[4] = 3 
     weekDaysFrom[5] = 4 
     weekDaysFrom[6] = 5 

    var prevMon = new Date(makeDate+weekDaysTo[n]*3600000*24); //Converts ms  into days and adds 

    Logger.log('Next Monday is '+prevMon); 

    var followingMon = new Date(makeDate-weekDaysFrom[n]*3600000*24); //Converts ms into days 
    Logger.log('Last Monday was ' +followingMon); 

Die Protokollausgabe ist:

[16-05-22 21:17:58:419 ICT] Sun May 22 21:17:58 GMT+07:00 2016 
[16-05-22 21:17:58:419 ICT] weekDaysTo gives 1 
[16-05-22 21:17:58:420 ICT] Next Monday is Invalid Date 
[16-05-22 21:17:58:420 ICT] Last Monday was Mon May 16 2016 21:17:58 GMT+0700 (ICT) 

Dies ist unabhängig von dem Wert I zu dem Zeitpunkt hinzufügen. Ich kann nicht sehen, warum das Subtrahieren funktioniert, aber das Hinzufügen verursacht ein ungültiges Datum. Das Ändern der hinzugefügten Zahlen hat keine Auswirkungen, sondern ändert sich in Subtraktionsfunktionen.

Antwort

0

Das liegt daran, dass JavaScript die Addition und Subtraktion je nach den Operandentypen unterschiedlich behandelt.

> new Date() 
Sun May 22 2016 14:45:00 GMT+0000 (UTC) 
> new Date()+1 
'Sun May 22 2016 14:45:05 GMT+0000 (UTC)1' 
> new Date()-1 
1463928307077 

In Ihrem Beispiel sollten Sie versuchen, makeDate zu Millisekunden vor der Durchführung zusätzlich Umwandlung, entweder durch +makeDate oder makeDate.getTime() tun.

Zum Beispiel statt:

var prevMon = new Date(makeDate+weekDaysTo[n]*3600000*24); 

Versuchen:

var prevMon = new Date(+makeDate+weekDaysTo[n]*3600000*24); 
+0

, dass es hat! Und lernte etwas Neues. Vielen Dank! –

0

Das ist für immer am nächsten Montag extrem gewundenen Code ist. Vielleicht funktioniert es, aber betrachten Sie einen viel einfacheren Algorithmus. Hoffentlich werden die Kommentare sind ausreichend:

/* Given a date, return a new date for the following Monday. 
 
** If date is a Monday, returns the following Monday. 
 
** 
 
** @param {Date} date - date to get next Monday of. 
 
**     - Default is current date. 
 
** @returns {Date} - date for next Monday. 
 
*/ 
 
function getNextMonday(date) { 
 
    // Copy provided date or use current date 
 
    date = date? new Date(+date) : new Date(); 
 

 
    // Get the day number 
 
    var dayNum = date.getDay(); 
 

 
    // Set date to next Monday 
 
    date.setDate(date.getDate() + (dayNum? 8 - dayNum: 1)); 
 
    return date; 
 
} 
 

 
var x = new Date(2016,4,29) 
 
document.write('Start date: ' + x + '<br>Next Monday: ' + getNextMonday(x)); 
 
x = new Date(); 
 
document.write('<br><br>Start date: ' + x + '<br>Next Monday: ' + getNextMonday());

Hier ist eine ähnliche Funktion für den vorherigen Montag bekommen:

function getPreviousMonday(date) { 
    date = date? new Date(+date) : new Date(); 
    var dayNum = date.getDay(); 
    // If Sunday, subtract 6. If Monday, subtract 7. Otherwise subtract dayNum - 1 
    date.setDate(date.getDate() - (dayNum? (dayNum - 1 || 7) : 6)); 
    return date; 
} 
+0

Convoluted ist ein Wort, das verwendet wird, um mein Progamming (und vielleicht ich!) Seit meiner Universität zu beschreiben. Das ist viel eleganter. Vielen Dank. –

Verwandte Themen