JavaScript時間處理之幾個月前或幾個月後的指定日期

来源:http://www.cnblogs.com/peixuanzhihou/archive/2016/12/20/6204551.html
-Advertisement-
Play Games

在平常項目開發過程中,經常會遇到需要在JavaScript中處理時間的情況,無非兩種(1,邏輯處理 2,格式轉換處理)。當然要說相關技術博,園子里閉著眼睛都能抓一把,但是我要做的是:既然有幸被我碰到了,就要儘可能的分析轉化為自己最適合自己的東西,成為自己知識庫的一部分;同時希望能幫助有需要的同學解決 ...


  在平常項目開發過程中,經常會遇到需要在JavaScript中處理時間的情況,無非兩種(1,邏輯處理  2,格式轉換處理)。當然要說相關技術博,園子里閉著眼睛都能抓一把,但是我要做的是:既然有幸被我碰到了,就要儘可能的分析轉化為自己最適合自己的東西,成為自己知識庫的一部分;同時希望能幫助有需要的同學解決遇到的相關小問題。

  時間邏輯處理

    此類型常用需求為:推算幾個月後(前)的今天的日期。

 1     /**
 2     *獲取幾個月前的輸入日期
 3     *{param:DateTime} date 輸入日期(YYYY-MM-DD)
 4     *{param:number } monthNum 月數
 5     */
 6     GetPreMonthDay: function (date,monthNum)
 7     {
 8         var dateArr = date.split('-');
 9         var year = dateArr[0]; //獲取當前日期的年份
10         var month = dateArr[1]; //獲取當前日期的月份
11         var day = dateArr[2]; //獲取當前日期的日
12         var days = new Date(year, month, 0);
13         days = days.getDate(); //獲取當前日期中月的天數
14         var year2 = year;
15         var month2 = parseInt(month) - monthNum;
16         if (month2 <=0) {
17             year2 = parseInt(year2) - parseInt(month2 / 12 == 0 ? 1 : parseInt(month2) / 12);
18             month2 = 12 - (Math.abs(month2) % 12);
19         }
20         var day2 = day;
21         var days2 = new Date(year2, month2, 0);
22         days2 = days2.getDate();
23         if (day2 > days2) {
24             day2 = days2;
25         }
26         if (month2 < 10) {
27             month2 = '0' + month2;
28         }
29         var t2 = year2 + '-' + month2 + '-' + day2;
30         return t2;
31     }
 1    /**
 2     *獲取下一個月的輸入日期
 3     *{param:DateTime} date 輸入日期(YYYY-MM-DD)
 4     *{param:number } monthNum 月數
 5     */
 6     GetNextMonthDay: function (date, monthNum)
 7     {
 8         var dateArr = date.split('-');
 9         var year = dateArr[0]; //獲取當前日期的年份
10         var month = dateArr[1]; //獲取當前日期的月份
11         var day = dateArr[2]; //獲取當前日期的日
12         var days = new Date(year, month, 0);
13         days = days.getDate(); //獲取當前日期中的月的天數
14         var year2 = year;
15         var month2 = parseInt(month) + parseInt(monthNum);
16         if (month2 >12) {
17             year2 = parseInt(year2) + parseInt((parseInt(month2) / 12 == 0 ? 1 : parseInt(month2) / 12));
18             month2 = parseInt(month2) % 12;
19         }
20         var day2 = day;
21         var days2 = new Date(year2, month2, 0);
22         days2 = days2.getDate();
23         if (day2 > days2) {
24             day2 = days2;
25         }
26         if (month2 < 10) {
27             month2 = '0' + month2;
28         }
29 
30         var t2 = year2 + '-' + month2 + '-' + day2;
31         return t2;
32     }

 測試效果:

  發沒發現有個問題,通過29日來推,前後都會是29。 1月31號推到二月就是2月29(因為2月就29天)。

  那麼這種邏輯對於有些需求來說就得根據實際情況變動一下。譬如:我想繳納預存一個月的費用。當前我已經繳納了2.1-2.29(2月一整月)的費用,預存一個月就應該是(3.1-3.31)。通過此邏輯得到卻是3.1-3.29,所以使用請根據實際情況!

  

      ps:別人博始終解決的別人的需求。再遇到新需求再更新吧.............

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一是:項目的路徑需要放在Documents and Settings\,也就是預設的文件夾的地方,不然會報錯錯誤範例為:Question:CY8CKIT-023 kit example project fails to build in PSoC Creator with the followin ...
  • 我使用的是海康DS-2CD852MF-E, 200萬,網路攝像機,已經比較老了,不過SDK在海康官網下載的,開發流程都差不多. 海康攝像機回調解碼後的視頻數據格式為YV12,順便說一下YV12的數據格式 YYYY V U. 我這個是720P,即1280 * 720解析度. 那麼Y分量的數量為 128 ...
  • 適配器模式:將一個類的介面轉換成客戶希望的另外一個介面,使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。 如下圖(借圖): // 設置書的介面 客戶端測試: 輸出結果: 這時候,你想創建一個可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些介面可能不一定相容的類)協同工作。 如 ...
  • 這節主要說一下Angular的指令。Angular的指令有內置指令和自定義指令。 一、內置指令 在 Angular 中通過指令對DOM的功能進行擴展。這也是對常用功能的模塊化封裝。Angular 提供了一系列常用的指令,這些指定都是以 ng 開頭的,我們稱為內置指令。 後面會講到如何自定義指令。其實 ...
  • TYPESDK 服務端設計思路與架構之一:應用場景分析 作為一個渠道SDK統一接入框架,TYPESDK從一開始,所面對的需求場景就是多款游戲,通過一個統一的SDK服務端,能夠同時接入幾十個甚至幾百個各種渠道的SDK。而且這些渠道介面的具體接入欄位和接入邏輯,每個月以至每周,都可能發生或大或小的變動。 ...
  • 好久沒寫代碼了,終於好不容易接到了開發任務,一看時間還挺充足的,我就慢慢整吧,若是遇上趕進度,基本上直接是功能優先,完全不考慮設計。你可以認為我完全沒有追求,當身後有鞭子使勁趕的時候,神馬設計都是浮雲,按時上線才是王道,畢竟領導是不會關註過程和代碼質量的,領導只看結果,這也許就是我等天朝碼農的悲哀。 ...
  • datepicker可以為bootstrap添加一個事件選擇控制項,適用於任何需要調用的場合,支持多種事件格式輸出(比如:dd, d, mm, m, yyyy, yy等),是製作網頁不可缺失的插件。 Requirements Bootstrap 2.0.4+ jQuery 1.7.1+ 線上文檔 Da ...
  • 一、閉包(Closure) 1.1、閉包相關的問題 請在頁面中放10個div,每個div中放入字母a-j,當點擊每一個div時顯示索引號,如第1個div顯示0,第10個顯示9;方法:找到所有的div,for迴圈綁定事件。 示例代碼: 運行結果: 因為點擊事件的函數內部使用外部的變數i一直在變化,當我 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...