TS时间戳转换
在項目中時常會有時間戳需要轉化成正常時間顯示,每次調用太麻煩,寫成函數調用吧
場景一:時間轉化時間戳
/*** 時間格式 普通時間戳轉換時間* @param value 時間戳*/ export function changeTime(value: any) {return new Date(value.format('YYYY-MM-DD HH:mm:ss')).getTime(); }使用范例
modelRef.value.startTime = changeTime(data.startTime);場景二 時間戳轉化時間
不得不提及new Date()這個方法了
//獲得當前時間 let now = new Date();//new Date(時間戳) 格式轉化 時間戳轉化正常標準化時間 let someTime = new Date(1657521771000); //結果:Mon Jul 11 2022 14:42:51 GMT+0800 (中國標準時間)//轉化是不夠的,還需要一定格式整理,正則走起 let someTime = new Date(initTime).toLocaleString().replace(/:\d{1,2}$/, ' ')//假如正則不是很了解,反正方法千千萬,適合自己最重要 date = new Date(time).getFullYear() + '/' + Number(new Date(time).getMonth() + 1) + '/' + new Date(time).getDate();//當然在詳情頁面,一般我們就不用這么麻煩 <p class="field_value">{{ Details?.createTime | date:'yyyy-MM-dd HH:mm' }}</p>相關其它函數參考:js中日期轉換成時間戳 - 百度文庫
場景三?一次性轉化多個時間戳
需要把后端傳來json中幾個字段的時間戳都需要轉化成正常時間顯示,同時,這些key可能不存在
/*** 時間格式 時間戳轉換時間* @param arr 鍵名數組* @param data 原來數據,若含有arr數組中的鍵名,鍵值由時間戳轉化時間*/ export function pipeTime(params: any[], data: any) {params.map(item => {if (data[item]) {data[item] = new Date(Number(data[item])).toLocaleString().replace(/:\d{1,2}$/, ' ');}return item;})return data }使用范例:
//引用過來 import { pipeTime } from '@/utils/array'const arr = ['createTime', 'payTime'] // data--后端傳來整個json列表 element--列表其中一條數據 // arr--列表某一條中為需要轉化的時間戳的key的集合 data.forEach(element => {element = pipeTime(arr, element);});場景四?結合組件,把正常時間轉化為時間戳
提交時間時,整理為時間戳
先舉個栗子:
?打印結果?
?一定確保此時時間格式這樣子
然后直接調用場景一的方法即可
愿意擴展可以了解:toLocaleDateString()這個方法
場景五 獲得當前時間戳或者時間的方法
// 獲得當前時間 getNowDate() {const myDate = new Date();const year = myDate.getFullYear(); // 獲取當前年const mon = myDate.getMonth() + 1; // 獲取當前月const date = myDate.getDate(); // 獲取當前日const hours = myDate.getHours(); // 獲取當前小時const minutes = myDate.getMinutes(); // 獲取當前分鐘const seconds = myDate.getSeconds(); // 獲取當前秒const now = year + '-' + mon + '-' + date + ' ' + hours + ':' + minutes + ':' + seconds;return now;}// 獲得當前時間時間戳getTimestamp() {return new Date(this.getNowDate()).getTime();}場景六?時間戳的計算
舉個栗子
Mon Jun 13 2022 15:29:45 GMT+0800 (中國標準時間):1655105385000
Tue Jun 14 2022 15:29:45 GMT+0800 (中國標準時間):1655191785000
兩次時間差一天,那么時間戳差了86400*1000
而86400 = 24*60*60
也就是每多加一天,時間戳多加 24*60*60*1000
應用一:規定時間范圍幾天
例如在時間規定,退貨時間七日內,可選時間開始時間到往后七天,其他時間不可選擇
那么
endTime = startTime + 24 * 60 * 60 * 1000 *7 - 1;
提問:為什么要-1?
當然不能算第二天了啊!哈哈哈~
用例:預產期280天,獲取當天時間,自動計算預產日期
// 1、此處調用場景五 獲得當前時間 // 2、計算天數 item1--懷孕過了多少周 item2--懷孕零多少天 比如 懷了3周2天dataExpected(item1: any, item2: any) {let item = 280 - (Number(item1 * 7) + Number(item2));item = item * 24 * 60 * 60 * 1000 // 剩余時間const t1 = this.getTimestamp();// 獲取當前時間戳const t2 = item + t1;// 計算時間戳之和if (t2 > 0) {const i = {expectedDate: new Date(t2)}}}應用二:規定范圍是1天、 1周或者1個月,應用于時間選擇器
getTimes() {enum DayTime { ALL = 0, DAY = 1, WEEK = 2, MONTH = 3 }if (this.btnNum === DayTime.DAY) {this.form.value.startTime = new Date(new Date().toLocaleDateString()).getTime();this.form.value.endTime = new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;} else if (this.btnNum === DayTime.WEEK) {this.getWeek();} else if (this.btnNum === DayTime.MONTH) {this.getMounth();}}getWeek() {// 按周日為一周的最后一天計算const date = new Date();// 今天是這周的第幾天const today = date.getDay();// 上周日距離今天的天數(負數表示)let stepSunDay = -today + 1;// 如果今天是周日if (today === 0) {stepSunDay = -7;}// 周一距離今天的天數(負數表示)const stepMonday = 7 - today;const time = date.getTime();const monday = new Date(time + stepSunDay * 24 * 3600 * 1000);const sunday = new Date(time + stepMonday * 24 * 3600 * 1000);this.startTime = new Date(monday.toLocaleDateString()).getTime();this.endTime = new Date(sunday.toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;}// 獲取本月的起始時間戳getMounth() {// 獲取當前月的第一天const start = new Date().setDate(1);// 獲取當前月的最后一天const date = new Date();const currentMonth = date.getMonth() + 1;const nextMonthFirstDay = new Date(date.getFullYear(), currentMonth, 1);const oneDay = 1000 * 60 * 60 * 24;const end = new Date(nextMonthFirstDay.getTime() - oneDay);this.startTime = new Date(new Date(start).toLocaleDateString()).getTime();this.endTime = new Date(end.toLocaleDateString()).valueOf() + 24 * 60 * 60 * 1000 - 1;}應用場景很多,代碼是死的,人是活得,先明白自己能獲得的時間是什么格式,要變成什么格式,然后調用方法或者計算就可以了。
注意:時間的格式,有國際化的,有moment數據類型的,有正則獲得的,有時間戳的等等
總結
- 上一篇: UE4 学习笔记
- 下一篇: 京东数科“四位一体”布阵新基建沙场