2012-07-16 52 views
0

即時尋找數學公式來加/減日期/月。我只需要知道年份和月份,因此可以忽略這些日子。添加和減少使用簡單的數學月

這是我想出了添加個月的僞代碼:

OldYear = 2012 // current year 
OldMonth = 3 // current month 
AddMonths = 0 // the months to be added 

FooBar = OldMonth + AddMonths 

NewYear = OldYear + FooBar/12 
NewMonth = FooBar % 12 

IF NewMonth = 0 
    NewYear = NewYear - 1 
    NewMonth = 12 
END IF 

// set AddMonths to 0 and the result will be 2012.03 
// set AddMonths to 6 and the result will be 2012.09 
// set AddMonths to 9 and the result will be 2012.12 
// set AddMonths to 11 and the result will be 2013.02 
// set AddMonths to 23 and the result will be 2014.02 
// set AddMonths to 38 and the result will be 2015.05 

,它真正偉大的作品,但有一個更好的方法?我真的不喜歡IF NewMonth = 0重新調整的需要。

但我的實際問題是,我不能拿出一個對應的公式來減去幾個月。我嘗試了各種各樣的東西,但一切都失敗了,它讓我瘋狂。所以任何幫助將不勝感激!

回答

0

這是我的意見在@馬特的回答組合,和@馬特

的答案公式可以,如果你採取基於0個月方案大大降低。

僞代碼:

year = 2012; // year 2012 
month = 6; // July (NOT June) 
monthToAdd = -20; // +ve/-ve means add/subtract 

resultYear = (year * 12 + month + monthToAdd) /12; 
resultMonth = (year * 12 + month + monthToAdd) mod 12; 

// resultYear == 2010 
// resultMonth == 10 , which means November 
+0

哇我永遠不會想出解決方案。非常感謝你們! :) – 2012-07-16 12:58:33

1

一種可能的解決辦法是通過12(因此將其轉換爲個月),分別加上或減去AddMonthsSubMonths,然後通過使用整數和模塊化除法轉換回NewYearNewMonth乘以OldYear(取決於你的編程語言,你可以簡化這一點)。

+0

一件事將在簡化公式幫助是採用基於零一個月的介紹。即0 = 1月,1 = 2月,依此類推。當然,您可能想要在獲得輸入或執行輸出時從基於1的月份演示文稿轉換而來。 – 2012-07-16 07:38:54

+0

@AdrianShum,你是指'OldMonth'和'NewMonth'或'[Add/Sub] Month'? – Matt 2012-07-16 07:41:01

+1

舊的/新的月份。剛剛添加了一個答案,請參閱參考 – 2012-07-16 07:43:56