摘要:獲得某月的天數(shù)獲得本季度的開始月份獲得今天之前的日期獲得今天之后的日期獲得本周的開始日期獲得本周的結(jié)束日期獲得上周的開始日期獲得上周的結(jié)束日期獲得本月的開始日期獲得本月的結(jié)束日期獲得本季度的開始日期獲得本季度的結(jié)束日期
最近項(xiàng)目中遇到一個(gè)問題, 提交后的時(shí)間后臺(tái)會(huì)返回"2018-01-05T17:32:03"這樣的一個(gè)時(shí)間格式, 在展示的是則只需要展示"2018-01-05". 這種需求應(yīng)該有很多種方法, 這里我列舉兩個(gè).
強(qiáng)行截取: substr(0, 10); 任意截取方法
時(shí)間格式化: 通過new Date() 方法格式化時(shí)間
詳細(xì)說一個(gè)第二種時(shí)間格式化的問題
初始時(shí)只寫了最簡(jiǎn)單時(shí)間格式化方法:
formatDate(date) { const _date = date ? new Date(date) : new Date(); // 這里判斷是否有傳入的時(shí)間, 如果沒有時(shí)間則創(chuàng)建當(dāng)前時(shí)間 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"這個(gè)事件來說, 在QQ瀏覽器下格式化的時(shí)間會(huì)是"2018-01-06", 解決這個(gè)問題在格式化時(shí)要替換掉時(shí)間中的"T"字符, 當(dāng)我以為這樣就很穩(wěn)妥時(shí)我打開了一下ie瀏覽器結(jié)果發(fā)現(xiàn)格式化后的時(shí)間都為NAN了, 又去查找癥結(jié)所在.
在IE和Safari時(shí)間轉(zhuǎn)化時(shí)間戳?xí)r"yyyy-mm-dd"是不能轉(zhuǎn)化為時(shí)間戳, 需要"yyyy/mm/dd hh:ii:ss"格式才能正取轉(zhuǎn)化.
下面給出完整代碼:
export default class DateChoice { /** @agruments config { s: "-", // 格式化時(shí)間分隔符 默認(rèn)為"-" } **/ constructor(config = {}) { this.s = config.s || (config.s === "" ? "" : "-"); this.now = new Date(); // 當(dāng)前日期 this.nowDayOfWeek = this.now.getDay() - 1; // 今天本周的第幾天 this.nowDay = this.now.getDate(); // 當(dāng)前日 this.nowMonth = this.now.getMonth() + 1; // 當(dāng)前月 this.nowYear = this.now.getYear(); // 當(dāng)前年 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, "/"); //注意:指定一個(gè)具體的時(shí)間轉(zhuǎn)換時(shí)間戳,需要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); } // 獲得某月的天數(shù) 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); } // 獲得本周的結(jié)束日期 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); } // 獲得上周的結(jié)束日期 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); } // 獲得本月的結(jié)束日期 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); } // 獲得本季度的結(jié)束日期 getQuarterEndDate() { const quarterEndMonth = this.getQuarterStartMonth() + 2; const quarterStartDate = new Date(this.nowYear, quarterEndMonth - 1, this.getMonthDays(quarterEndMonth)); return this.formatDate(quarterStartDate); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90708.html
摘要:如何解決瀏覽器多個(gè)標(biāo)簽頁之間的通信使用使用使用和概念簡(jiǎn)單理解就是一種可以讓服務(wù)器在客戶端的硬盤或者內(nèi)存里面存儲(chǔ)少量數(shù)據(jù)或者說從客戶端硬盤讀取數(shù)據(jù)的技術(shù)的存放形式的信息是以名值形式保存一個(gè)名值僅僅是一條信息保存位置是,隱藏文件的功能多 如何解決瀏覽器多個(gè)標(biāo)簽頁之間的通信? 使用cookie 使用web worker 使用localeStorage和sessionStorage co...
摘要:如果路由重組,模板中的鏈接將被打斷而變得無法訪問。靜態(tài)文件應(yīng)用程序不僅僅是由代碼和模板組成。當(dāng)服務(wù)器收到來自之前示例的,它會(huì)產(chǎn)生一個(gè)響應(yīng)包含的文件內(nèi)容。一個(gè)優(yōu)雅的解決方案是允許服務(wù)器只發(fā)送時(shí)間給瀏覽器,由瀏覽器轉(zhuǎn)為當(dāng)?shù)貢r(shí)間并渲染。 4、鏈接 任何應(yīng)用程序都有多個(gè)路由,必然需要包含鏈接來連接不同的頁面,例如導(dǎo)航欄。 在模板中,對(duì)于簡(jiǎn)單的路由直接寫URLs做鏈接是非常瑣碎麻煩的,而給帶...
1. 知識(shí)體系 1.1從輸入 URL 到頁面加載完成,發(fā)生了什么? 首先我們需要通過 DNS(域名解析系統(tǒng))將 URL 解析為對(duì)應(yīng)的 IP 地址,然后與這個(gè) IP 地址確定的那臺(tái)服務(wù)器建立起 TCP 網(wǎng)絡(luò)連接,隨后我們向服務(wù)端拋出我們的 HTTP 請(qǐng)求,服務(wù)端處理完我們的請(qǐng)求之后,把目標(biāo)數(shù)據(jù)放在 HTTP 響應(yīng)里返回給客戶端,拿到響應(yīng)數(shù)據(jù)的瀏覽器就可以開始走一個(gè)渲染的流程。渲染完畢,頁面便呈現(xiàn)給了...
閱讀 1879·2021-11-15 11:39
閱讀 1244·2021-10-18 13:29
閱讀 1201·2021-08-31 09:42
閱讀 2753·2019-08-30 11:11
閱讀 2130·2019-08-26 12:12
閱讀 2121·2019-08-26 10:17
閱讀 3398·2019-08-23 18:38
閱讀 3236·2019-08-23 18:38