JS:格式化日期時間與封裝,思路與代碼(附文件)

小小的需求:

獲取當前時間,格式爲:2020/06/30 17:00(此時此刻)

獲取指定時間,格式爲:2020/07/01 17:00(一天後,即明天的此時此刻)

一、實現思路

1. 創建一個方法,將傳入的日期對象處理後直接返回,先貼上代碼:

// 格式化 日期時間
function formatDateTime(date = new Date()) { //不傳date則默認當前時間
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let hour = date.getHours();
  let minute = date.getMinutes();
  let second = date.getSeconds();
  // 不足兩位,添“0”
  month = month < 10 ? "0" + month: month;
  day = day < 10 ? "0" + day: day;
  hour = hour < 10 ? "0" + hour: hour;
  minute = minute < 10 ? "0" + minute: minute;
  second = second < 10 ? "0" + second: second;
  return year + "/" + month + "/" + day + " " + hour + ":" + minute + ":" + second;
}

// 此時此刻
let today = formatDateTime();
console.log("此時此刻:", today);

// 明天的此時此刻
let t = new Date().getTime() + 60 * 60 * 24 * 1000; //24小時後的時間戳
let tomorrow = formatDateTime(new Date(t));
console.log("明天的此時此刻:", tomorrow);

2. 代碼解析:

formatDateTime():傳入Date對象,獲取年月日、時分秒,返回處理後的日期時間字符串;

today:調用時不傳參,即獲取此時此刻的日期字符串;

tomorrow:參數爲明天(此時此刻)的日期字符串;

t = new Date().getTime() + 60 * 60 * 24 * 1000:當前時間戳 + 24小時的毫秒值 = 明天(此時此刻)的時間戳,且new Date(t)將時間戳轉爲Date對象,最終得到明天(此時此刻)的日期字符串。

控制檯輸出:

此時此刻: 2020/06/30 17:00
明天的此時此刻: 2020/07/01 17:00

二、代碼優化

1. 基於以上思路,再加入多個參數,實現自定義分隔符等,同樣先貼出代碼:

// 格式化 日期時間
function formatDateTime(date = new Date(), p1 = "-", p2 = ":") {
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let hour = date.getHours();
  let minute = date.getMinutes();
  let second = date.getSeconds();
  return [year, month, day].map(formatNumber).join(p1) + " " + [hour, minute, second].map(formatNumber).join(p2);
}

// 格式化 日期數字
function formatNumber(n) {
  n = n.toString();
  return n[1] ? n: "0" + n;
}

// 此時此刻
let today = formatDateTime(undefined, "/");
console.log("此時此刻:", today);

// 明天的此時此刻
let t = new Date().getTime() + 60 * 60 * 24 * 1000; //24小時後的時間戳
let tomorrow = formatDateTime(new Date(t), "/");
console.log("明天的此時此刻:", tomorrow);

2. 代碼解析:

formatDateTime():加入分隔符參數,不傳則使用默認值;

formatNumber():數字不足兩位,在前面補“0”並返回;

today:傳入undefined,判斷不存在,即使用默認值;

tomorrow:傳入自定義的日期對象。

控制檯輸出:

此時此刻: 2020/06/30 17:00
明天的此時此刻: 2020/07/01 17:00

三、更多

或者這樣寫:

// 格式化 日期時間
var formatDateTime = (date = new Date(), p1 = "-", p2 = ":") =>{
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let hour = date.getHours();
  let minute = date.getMinutes();
  let second = date.getSeconds();
  return [year, month, day].map(formatNumber).join(p1) + " " + [hour, minute, second].map(formatNumber).join(p2);
};

// 格式化 日期數字
var formatNumber = (n) =>{
  n = n.toString();
  return n[1] ? n: "0" + n;
};

 附件下載(CSDN)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章