iT邦幫忙

1

差距幾年幾月幾天 要怎麼算 ?  

  • 分享至 

  • xImage

2022/8/30 - 2015/2/17 

script 或 程式都可以 

看更多先前的討論...收起先前的討論...
player iT邦大師 1 級 ‧ 2022-08-30 15:34:19 檢舉
年有365或366日。
月有28或29或30或31日。
所以你的問題不明確。
阿恢 iT邦新手 4 級 ‧ 2022-08-30 15:45:18 檢舉
算出來後再算回去,就會有落差,所以這只是大概...
以你的例子,兩個日期差2741天,若變變幾年幾月幾日,以取整數來說,會是7年6個月又一天,再算回去就變2736天,因為有潤年或2月份或大小月之差。
基本上我講的是一般認知的作法
兩個日期相減會得到天數 2751
等於 七年六個月又13天
( WIN 小算盤計算結果 )
天數 /365 = 年 ( 得到 7 )
天數 %365 / 30 = 月 ( 得到 6 )
天數 %365 %30 = 日 ( 得到 16 )
兩個日期相距 7年6月又16天
這是採用一年 365天一月 30 天的算法
第二種算法
頭尾不足一年的日數先去掉
兩者年相減然後減 1,如 2022 - 2015 - 1 = 6
然後算 不足一年的前後兩年的應計月份
8-1 + 12 - 2 = 17
到這裡就是有 七年五個月了
接下來算應計日數 30 + 28-17 = 41
然後我們都知道六月是30天所以 41-30= 11
算得兩者差距為 7年6個月又 11天
就這樣囉
第三種就是前面兩種結果再做一次算術平均
( 7 + 7 ) / 2 = 7年
( 6 + 6 ) / 2 = 6月
( 16 + 11 ) / 2 = 13 日
有沒有很接近實際上的日數呢
上面給樓主參考了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2022-08-31 09:17:17
最佳解答

正常來說,比較少會計算幾月。
畢竟有28 29 30 31的問題存在。

比較單純的計算是,先計算出實際日數。
除於365天(忽略閏年366日的計算)
剩於日數再除於30日做為月數。
再將剩於日數當成日數。

以上是一種算法。

另外一種算法為對應計算法。
年對年、月對月、日對日。
基中月的基數為12
日的基數正常還是會用30。
有些人會用最大31底數來計算。這就看人了。
也就是說。當月扣除後為負值的情況下。需要扣掉1年並+12(基數)到月計算。
同理日數也等同辦理。當日數扣除為負數的情況下。需要扣除1個月+30日到日數計算

比較複雜的計算就是會將閏月閏年也合計計算進去。

我是比較喜歡用第一種算法。畢竟第二種算法的誤差性太大。
第一種算法可以先將日期轉換為unixtime後計算日數。(這樣可以排除閏年閏月的問題)
再依照日數來換成?年?月?日處理。
畢竟差異日數並沒有閏年閏月的問題存在。只是單純的計算值。實際日數值。

補充說明一下。
由於我們是採用月數依30日計算。
所以如這樣的計算。實際會只有360天。

所以當除於 365 時剩於的日數是有機會超過360日。
導致有可能會出現 1年12月?日 這樣的計算

其實我自已寫的程式是當月計算出12時。會自動年+1月變0計算。
(畢竟不可能出現13的值)。順便給你參考。

貼上WIN 小算盤的結果
https://ithelp.ithome.com.tw/upload/images/20220831/20097082rvVFtJRtsV.png

0
Juro十六
iT邦新手 3 級 ‧ 2022-08-30 15:58:22

可以算幾天或幾周
幾個月有28.29.30.31天的問題

//C Sharp算天數
private void DayMATH()
        {
            DateTime D1 = new DateTime(2022, 08, 30);
            DateTime D2 = new DateTime(2015, 02, 17);
            label1.Text = (D1 - D2).Days.ToString();
        }
sx0800 iT邦新手 1 級 ‧ 2022-08-31 06:37:36 檢舉

js code
(new Date(2015,1,17).getTime()- new Date(2022,7,22).getTime())/(86400*1000)

2022/8/30 - 2015/2/17

謝謝兩位回答

我要發表回答

立即登入回答