js 日期對象 31 號 setMonth 的鍋

BiaoChenXuYing

前言

需求:獲取當前日期的前一個月份前端

當月有 31 天時,JS 日期對象 setMonth 問題vue

1. 通常作法

當前日期若是不是 31 號, 是沒問題的,是 31 號就會有問題:java

// 好比今天是 2018-09-30 號,前一個月應該是 2018-08-30 
let now = new Date(new Date("2018-09-30").setMonth(new Date("2018-09-30").getMonth() - 1))
console.log('now :', now.toLocaleString())
// now : 2018/8/30 上午8:00:00

// 好比今天是 2018-10-31 號,前一個月沒有 31 號,因此結果 2018-10-01:
let now = new Date(new Date("2018-10-31").setMonth(new Date("2018-10-31").getMonth() - 1))
console.log('now :', now.toLocaleString())
// now : 2018/10/1 上午8:00:00
複製代碼

2. 正確的方法:

2.1 方法一

原理: 當前時間減去當前時間的天數node

function initLastMonth(date) {
            let monthDate = new Date(date);
            let newDate = new Date(monthDate.getTime() - 24 * 60 * 60 * 1000 * monthDate.getDate())
            console.log('newDate :', newDate.toLocaleString())
          return newDate
}
initLastMonth("2018-10-31")
//  newDate : 2018/9/30 上午8:00:00
複製代碼

2.2 方法二

原理: setMonth 以前先 setDate(1)react

function initLastMonth(date) {
            const now = new Date(date);
            now.setDate(1)
            now.setMonth(now.getMonth() - 1)
            console.log(now.toLocaleString()) 
            return now
        }
initLastMonth("2018-10-31")
// 2018/9/1 上午8:00:00
複製代碼

最後

技術文章更新地址:githubgit

全棧開發 有興趣的朋友能夠掃下方二維碼關注個人公衆號,我會不按期更新有價值的內容。程序員

微信公衆號:BiaoChenXuYing 分享 前端、後端開發等相關的技術文章,熱點資源,全棧程序員的成長之路。github

關注公衆號並回復 福利 便免費送你視頻資源,絕對乾貨。後端

福利詳情請點擊: 免費資源分享--Python、Java、Linux、Go、node、vue、react、javaScriptbash

BiaoChenXuYing
相關文章
相關標籤/搜索