簡體   English   中英

如何在 JAVASCRIPT 中實現 MS-excel 的 EDATE() 功能

[英]How to implement EDATE() functionality of MS-excel in JAVASCRIPT

我必須在 JAVASCRIPT 中實現 MS-Excel 的 EDATE 功能

樣本:

EDATE(06-Aug-2020,13)

結果:2021 年 9 月 6 日

沒有這樣的功能,你必須自己構建它。

首先,我從您的字符串生成一個 JS 日期。 從中我提取年、月和日。
比我總結額外的月份並通過模 12 得到月份(JS 中的月份計為 0-11)。 如果月份為負數,我將增加 12 個月。 對於這一年,我添加了 integer 部分,從 monthSum didide 到 12。
如果這一天大於或等於 29 並且是 2 月並且是閏年(年模 4 為 0),則該天被設置為 29。在所有其他情況下,該天被設置為前一天的最小值和天數的最大值本月(存儲在數組 MONTH 中)。
現在我有了所需的日期,我只將其格式化為返回:在字符串“0”之前添加 2 位數的日期,然后取最后 2 個字符。 對於月份的縮寫,我使用數組 MONTH。

試試看。 我給你一些關於閏日和產生年份變化的負/正月份的關鍵例子。

 function edate(dateString, monthExtra) { const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const MONTH = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; let date = new Date(dateString); let year= -date.getFullYear(); let month = date.getMonth(); let day = date.getDate(); let monthSum = month + monthExtra; month = monthSum %12; if (month < 0) { month = 12 + month; } year = year + Math.floor(monthSum/12); if ( day>=29 && month==1 && (year %4 == 0 )) { day = 29; } else { day = Math.min(day, DAYS[month]); } return ("0" + day).slice(-2) + '-' + MONTH[month] + '-' + year; } console.log(edate('06-Aug-2020', 13)); console.log(edate('30-Jan-2020', -13)); console.log(edate('30-Jan-2019', 1)); console.log(edate('29-Mar-2020', -13));

暫無
暫無

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

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