[英]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.