摘要:獲得某月的天數獲得本季度的開始月份獲得今天之前的日期獲得今天之后的日期獲得本周的開始日期獲得本周的結束日期獲得上周的開始日期獲得上周的結束日期獲得本月的開始日期獲得本月的結束日期獲得本季度的開始日期獲得本季度的結束日期
最近項目中遇到一個問題, 提交后的時間后臺會返回"2018-01-05T17:32:03"這樣的一個時間格式, 在展示的是則只需要展示"2018-01-05". 這種需求應該有很多種方法, 這里我列舉兩個.
強行截取: substr(0, 10); 任意截取方法
時間格式化: 通過new Date() 方法格式化時間
詳細說一個第二種時間格式化的問題
初始時只寫了最簡單時間格式化方法:
formatDate(date) { const _date = date ? new Date(date) : new Date(); // 這里判斷是否有傳入的時間, 如果沒有時間則創建當前時間 const _y = _date.getFullYear(), _m = _date.getMonth() + 1, _d = _date.getDate(); if(_m < 10) { _m = `0${_m}` }; if(_d < 10) { _d = `0${_d}` }; return +`${_y}-${_m}-${_d}`; }
這樣寫是有瀏覽器兼容性問題的, 就拿"2018-01-05T17:32:03"這個事件來說, 在QQ瀏覽器下格式化的時間會是"2018-01-06", 解決這個問題在格式化時要替換掉時間中的"T"字符, 當我以為這樣就很穩妥時我打開了一下ie瀏覽器結果發現格式化后的時間都為NAN了, 又去查找癥結所在.
在IE和Safari時間轉化時間戳時"yyyy-mm-dd"是不能轉化為時間戳, 需要"yyyy/mm/dd hh:ii:ss"格式才能正取轉化.
下面給出完整代碼:
export default class DateChoice { /** @agruments config { s: "-", // 格式化時間分隔符 默認為"-" } **/ constructor(config = {}) { this.s = config.s || (config.s === "" ? "" : "-"); this.now = new Date(); // 當前日期 this.nowDayOfWeek = this.now.getDay() - 1; // 今天本周的第幾天 this.nowDay = this.now.getDate(); // 當前日 this.nowMonth = this.now.getMonth() + 1; // 當前月 this.nowYear = this.now.getYear(); // 當前年 this.nowYear += (this.nowYear < 2000) ? 1900 : 0; // this.lastMonthDate = new Date(); //上月日期 this.lastMonthDate.setDate(1); this.lastMonthDate.setMonth(this.lastMonthDate.getMonth() - 1); this.lastYear = this.lastMonthDate.getYear(); this.lastMonth = this.lastMonthDate.getMonth(); } // 格式化日期:yyyy-MM-dd @argument date 不傳則獲取今天日期 formatDate(date){ if(typeof date === "string" && date.includes("T")) { date = date.replace("T", " ").replace(/-/g, "/"); //注意:指定一個具體的時間轉換時間戳,需要yyyy/mm/dd hh:ii:ss格式,yyyy-mm-dd在IE和Safari下是有問題的。 }; const D = date ? new Date(date) : new Date(); let myyear = D.getFullYear(); let mymonth = D.getMonth() + 1; let myweekday = D.getDate(); if (mymonth < 10) { mymonth = "0" + mymonth; } if (myweekday < 10) { myweekday = "0" + myweekday; } return (myyear + this.s + mymonth + this.s + myweekday); } // 獲得某月的天數 getMonthDays(myMonth) { const monthStartDate = new Date(this.nowYear, myMonth - 1, 1); const monthEndDate = new Date(this.nowYear, myMonth, 1); const days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24); return days; } // 獲得本季度的開始月份 getQuarterStartMonth() { let quarterStartMonth = 1; if (this.nowMonth < 4) { quarterStartMonth = 1; } if (3 < this.nowMonth && this.nowMonth < 7) { quarterStartMonth = 4; } if (6 < this.nowMonth && this.nowMonth < 10) { quarterStartMonth = 7; } if (this.nowMonth > 9) { quarterStartMonth = 10; } return quarterStartMonth; } // 獲得今天之前的日期 getTodayBeforeDate(num) { const beforeDate = new Date(this.nowYear, this.nowMonth - 1, this.nowDay - num); return this.formatDate(beforeDate); } // 獲得今天之后的日期 getTodayAfterDate(num) { const afterDate = new Date(this.nowYear, this.nowMonth - 1, this.nowDay + num); return this.formatDate(afterDate); } // 獲得本周的開始日期 getWeekStartDate() { const weekStartDate = new Date(this.nowYear, this.nowMonth - 1, this.nowDay - this.nowDayOfWeek); return this.formatDate(weekStartDate); } // 獲得本周的結束日期 getWeekEndDate() { const weekEndDate = new Date(this.nowYear, this.nowMonth - 1, this.nowDay + (6 - this.nowDayOfWeek)); return this.formatDate(weekEndDate); } // 獲得上周的開始日期 getLastWeekStartDate() { const weekStartDate = new Date(this.nowYear, this.nowMonth - 1, this.nowDay - this.nowDayOfWeek - 7); return this.formatDate(weekStartDate); } // 獲得上周的結束日期 getLastWeekEndDate() { const weekEndDate = new Date(this.nowYear, this.nowMonth - 1, this.nowDay - this.nowDayOfWeek - 1); return this.formatDate(weekEndDate); } // 獲得本月的開始日期 getMonthStartDate() { const monthStartDate = new Date(this.nowYear, this.nowMonth - 1, 1); return this.formatDate(monthStartDate); } // 獲得本月的結束日期 getMonthEndDate() { const monthEndDate = new Date(this.nowYear, this.nowMonth - 1, this.getMonthDays(this.nowMonth)); return this.formatDate(monthEndDate); } // 獲得本季度的開始日期 getQuarterStartDate() { const quarterStartDate = new Date(this.nowYear, this.getQuarterStartMonth() - 1, 1); return this.formatDate(quarterStartDate); } // 獲得本季度的結束日期 getQuarterEndDate() { const quarterEndMonth = this.getQuarterStartMonth() + 2; const quarterStartDate = new Date(this.nowYear, quarterEndMonth - 1, this.getMonthDays(quarterEndMonth)); return this.formatDate(quarterStartDate); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90708.html
摘要:如何解決瀏覽器多個標簽頁之間的通信使用使用使用和概念簡單理解就是一種可以讓服務器在客戶端的硬盤或者內存里面存儲少量數據或者說從客戶端硬盤讀取數據的技術的存放形式的信息是以名值形式保存一個名值僅僅是一條信息保存位置是,隱藏文件的功能多 如何解決瀏覽器多個標簽頁之間的通信? 使用cookie 使用web worker 使用localeStorage和sessionStorage co...
摘要:如果路由重組,模板中的鏈接將被打斷而變得無法訪問。靜態文件應用程序不僅僅是由代碼和模板組成。當服務器收到來自之前示例的,它會產生一個響應包含的文件內容。一個優雅的解決方案是允許服務器只發送時間給瀏覽器,由瀏覽器轉為當地時間并渲染。 4、鏈接 任何應用程序都有多個路由,必然需要包含鏈接來連接不同的頁面,例如導航欄。 在模板中,對于簡單的路由直接寫URLs做鏈接是非?,嵥槁闊┑?,而給帶...
1. 知識體系 1.1從輸入 URL 到頁面加載完成,發生了什么? 首先我們需要通過 DNS(域名解析系統)將 URL 解析為對應的 IP 地址,然后與這個 IP 地址確定的那臺服務器建立起 TCP 網絡連接,隨后我們向服務端拋出我們的 HTTP 請求,服務端處理完我們的請求之后,把目標數據放在 HTTP 響應里返回給客戶端,拿到響應數據的瀏覽器就可以開始走一個渲染的流程。渲染完畢,頁面便呈現給了...
閱讀 1861·2021-11-15 11:39
閱讀 1226·2021-10-18 13:29
閱讀 1188·2021-08-31 09:42
閱讀 2741·2019-08-30 11:11
閱讀 2117·2019-08-26 12:12
閱讀 2116·2019-08-26 10:17
閱讀 3391·2019-08-23 18:38
閱讀 3228·2019-08-23 18:38