簡體   English   中英

添加日期至今-Google腳本

[英]Adding Days to Date - Google Scripts

我對此還很陌生,因此如果答案很明顯,我深表歉意。

我正在嘗試從今天的日期開始增加和減少幾天。 最終的想法是計算下周一和上周一的日期。

我看過這里 ,這解決了我的第一個問題,但接下來的問題使我感到困惑:從今天的日期中減去天數就沒有問題。 添加給出無效的日期。

代碼是:

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

日志輸出為:

[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)

這與我添加到日期的值無關。 我看不出為什么減法效果很好,但是加法會導致無效的日期。 更改添加的數字無效,將其更改為減法即可。

這是因為JavaScript根據操作數的類型處理加法和減法不同。

> 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

在您的示例中,您應該嘗試通過執行+makeDatemakeDate.getTime()makeDate轉換為毫秒,然后再執行加法操作。

例如,代替:

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

嘗試:

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

下周一要獲取的代碼非常復雜。 也許可以,但是考慮一個簡單得多的算法。 希望這些評論足夠:

 /* 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()); 

這是獲取上一個星期一的類似功能:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM