new Date時間格式轉換方法
阿新 • • 發佈:2021-10-21
平時經常會使用到時間轉換,元件庫已經有很多元件可以自動生成時間型別了,但是底層的封裝方法還是得有
獲取當前時間 new Date() 或者自己擁有一個毫秒時間
方法如下
/** * title: 時間、日期物件的格式化 * date:毫秒時間 * format:事件格式"yyyy-MM-dd hh:mm:ss",年-月-日 時:分:秒 * flag:計算剩餘時間則為true(d天h時m分s秒) **/ function dateFormat(date, format, flag) { var o = {}; if (!flag) { //eg:format="yyyy-MM-dd hh:mm:ss"; format = format || "yyyy-MM-dd hh:mm:ss"; date = new Date(Number(date)); o = { "M+": date.getMonth() + 1, // month "d+": date.getDate(), // day "h+": date.getHours(), // hour "m+": date.getMinutes(), // minute "s+": date.getSeconds(), // second "q+": Math.floor((date.getMonth() + 3) / 3), // quarter "S": date.getMilliseconds() }; if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); } } else { //剩餘日期 format = format || '年-月-日'; var day = 0, hour = 0, minute = 0, second = 0; if (date > 0) { date = date / 1000; day = Math.floor(date / (60 * 60 * 24)); hour = Math.floor(date / (60 * 60)) - day * 24; minute = Math.floor(date / 60) - day * 24 * 60 - hour * 60; second = Math.floor(date) - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60; } o = { "d+": day, // day "h+": hour, // hour "m+": minute, // minute "s+": second //second }; } for (var k in o) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); } } return format; }
衍生出一個追加時間的方法
/** * title: 日期追加時間 * time:時間(yyyy/MM/dd,yyyy/MM/dd hh:mm:ss,yyyy-MM-dd hh:mm:ss,yyyy-MM-ddThh:mm:ss.Z)這裡最後一種時間格式下方的第二種方法會有說明 * days:追加天數 * format:返回時間格式 * ms:毫秒、追加毫秒 **/ function dateAddTime(time, days, format, ms) { days = Number(days) || 0; if (time.indexOf('-') != -1 && time.indexOf('T') == -1) { time = time.replace(/\-/g, '/'); } var newTime; if (ms) { newTime = new Date(time).getTime() + Number(ms); } else { newTime = new Date(time).getTime() + days * 24 * 60 * 60 * 1000; } newTime = dateFormat(newTime, format); return newTime; }
在這裡補充第二種時間轉換的方式,這是對當前時間進行格式轉換的方法,使用的是toISOString()方法去獲取 拿到的時間格式是// YYYY-MM-DDTHH:mm:ss.sssZ,所以需要對拿到的格式做一下替換處理
function rTime(){
var dateTime = new Date();
return dateTime.toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}
這裡會存在一個問題,網上談論會出現8小時的時間差,說是用這個轉換時間會丟失時區從而導致少8小時的原因,於是乎,改成了下面這樣
function rTime(){ var dateTime = new Date(+new Date()+8*3600*1000); return new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '') }
然後看到還有一種方法是直接給小時上+8,和上面的做法其實差不多
function rTime(){
var dateTime = new Date();
var hour = dateTime.getHours + 8;
dateTime.setHours(hour);
return new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}
toISOString()方法借鑑了 toISOString()得到的日期時差8小時
封裝的方法參照了公司開發中的封裝方法