2010年11月4日 星期四

使用JavaScpript計算日期(幾年後、幾月後、幾天後)

使用JavaScpript計算日期(幾年後、幾月後、幾天後)

在使用JS時,
有時候可能會需要計算到期日,
就是就會某天,再加上某個天數(或年或月)後,
計算出來的日期。
在SQL裡,有DATEADD的函式;
在.Net裡,有DateTime.AddDays等函式;
而若要在JS計算的話,該如何實現呢??

主是要使用setYear()setMonth()setDate()

不過呢,這方法它的計算邏輯與.net及SQL的不太相同
不相同的地方就是在於大小月的處理方式

SQL的大小月處理及潤年

JavaScript的大小月處理及潤年


由上圖可知,JavaScript的潤年規則還是有的~~
不過,在計算跨月處理大小月時的邏輯,是會將多餘的天數累加上去的~~這點請注意。

至於.Net的呢,邏輯是與SQL相同。

程式碼參考如下:

//轉成日期格式
var orgDay = new Date("1983/4/29");
orgDay.setMonth(orgDay.getMonth() + 2);//加月份

//以下則為取出年、月、日
var d = orgDay.getDate();
var Y = orgDay.getFullYear();//此方法才可以確實的支援FX、IE、Chrome各大瀏覽器
var M = orgDay.getMonth() + 1;//月份是由0開始計算,也就是一月的話,取出的值會是0

if (d < 10) { d = "0" + d; } //設定日期若為個數則加0
if (M < 10) { M = "0" + M; } //設定日期若為個數則加0

//設定為1983/06/29的日期格式
var OkDay = Y + "/" + M + "/" + d;



抓取年份時,請採用getFullYear()。不要太直覺性的使用getYear(),
該方法會在FireFox及Chrome上發生問題~~
例如應該回傳2010的值,會變成「110」。
這110,是從「2010-1900」計算而來的~~~