2012-07-12 87 views
3

這是一個系統,基本上允許您設置給定事件的第一個日期,然後設置重現週期。如何有效計算連續日期給定的原始日期

例如,我從現在開始設定一個星期的日期,2012年7月19日,所以我知道我必須把這隻貓放在牛奶裏。我還將其設置爲每週通知,因此在未來幾周內我希望得到相同的通知。

原始日期位於我的數據庫中,這對於第1周來說是正確的,但在第2周我需要將原始日期作爲原始時間加上1周。表面上看來,這似乎很簡單,但我需要確保我能夠解釋閏年和不同的重現頻率(每兩週,每月,每年,不管)。

我想保留它作爲一個JavaScript實現 - 因爲它更快,我覺得可能需要比更新數據庫中的日期更少的代碼。也許這是不可實現的,任何指針都會非常出色。

我覺得這可能是一個起點:

Given a start date , how to calculate number of years till current date in javascript

Given a date, how can I efficiently calculate the next date in a given sequence (weekly, monthly, annually)?

更新,我寫了下面的返回的時間量在每個不同的情況下添加,從那裏我可以使用下面的答案:

var strDate = $(this).find('.next').text(); 
      var frequency = $(this).find('.occurs').text(); 
      var frmDate = getDateObject(strDate); 
      var toDate = new Date(); 

      var days = parseInt(Math.floor((frmDate - toDate)/86400000)); 

      if(days < 0) { 
       // find out how many WHOLE 'frequencies' have passed 
       var weeks = Math.ceil(0 - (days/7)); 
       var months = Math.ceil(0 - (monthDiff(toDate,frmDate))); 
       var years = Math.ceil(months/12); 
       //alert(days + '/' + weeks + '/' + fortnights + '/' + months + '/' + quarters + '/' + years); 

       if(frequency == 'Weekly') { frmDate.add(weeks).weeks(); } 
       if(frequency == 'Fortnightly') { frmDate.add(weeks*2).weeks(); } 
       if(frequency == 'Monthly') { frmDate.add(months).months(); } 
       if(frequency == 'Quarterly') { frmDate.add(months*3).months(); } 
       if(frequency == 'Annually') { frmDate.add(years).years(); } 

       var newdate = frmDate.toString("dd/MM/yyyy"); 
       //alert(newdate); 

       $(this).find('.next').text(newdate); 
      } 
+0

我能看到的這個演示看看下面的代碼,如果你已經完成了它在2012年?:)我遇到了同樣的問題,並執行它的遞歸部分的問題。任何幫助將不勝感激。謝謝。 – Superman 2015-01-04 05:18:09

回答

0

另外:

http://sql-plsql.blogspot.com/2010/07/dateadd.html

你不不得不擔心閏年等特殊日期,因爲大多數日期函數都會考慮這一點。

或者,您可以使用getDate(),getMonth()作爲其他用戶的建議。 var today = new Date(); today.setDate(today.getDate()+ numberOfDaysToAdd);

+0

雖然這裏的關鍵是要知道我想補充多少天。那麼,根據2012年12月12日的每週計劃,我是否會計算從第一次到今天爲止已經發生了多少個整週,然後再加上那麼多周+ 1? – Midwinter 2012-07-12 13:06:28

+0

等待,您想查找兩個給定日期之間的星期數?這是你的問題嗎? – roymustang86 2012-07-12 13:34:03

+0

不,但這是一個要求,因爲你不知道要添加多少時間,除非你先計算出來......除非我完全在這裏錯誤的森林裏。 – Midwinter 2012-07-12 14:04:45

0

我會做什麼(可能不是最好的解決方案,我只是com )從最初的日期開始並使用循環:while您觀察的日期小於當前日期,將觀察日期增加一週(兩週,每月,每年等)。如果您在當前日期着陸,則會發生此事件。否則,這是另一天。

可以使用之類的東西date.setDate(date.getDate()+1);遞增通過一天的日期,同樣+7了一個星期,使用set/getMonthset/getFullYear分別爲幾個月甚至幾年。 ,這個SQL的執行將使用DATEADD如果你給的值出界,JS都會把它包裝(使32月成爲4月1日)

+0

我認爲用JavaScript我可以採取兩個日期對象,一個爲今天,一個爲原始日期,並從另一個減去之間獲得時間。那麼我可以在幾周(或幾個月或幾年)內返回這段時間,並添加一個? – Midwinter 2012-07-12 13:09:13

0

請了一些原始的想法

var someDate = new Date(); 
for(var i = 0 ; i < 7 ; i++) 
    { 
someDate.setDate(someDate.getDate() + 1); 
     console.log(someDate) 
    } 

您可以測試相同的下面撥弄

Consecutive 7 days from current day