Skip to main content

[JS] Date Time Method 日期時間

常用#

/** * 取得當前時間 **/Date.now()                       //  回傳當前的 timestamp(毫秒)new Date()                       //  回傳目前時間的日期物件
/** * 時間(文字)與時間戳記(timestamp)間轉換 **/const dateObj = new Date(<timestamp>)   //  輸入 timestamp(毫秒),回傳設定的時間物件dateObj.getTime()                //  輸入時間物件,回傳特定時間的 timestamp(毫秒)Number(dateObj)                  // 一樣可以取得 timeStamp+dateObj                         // 一樣可以取得 timeStamp
new Date(dateString)             //    輸入字串,回傳實例,取得設定時間的日期物件new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
dateObj.toISOString()            //    將日期時間轉換成 ISO 8601 格式的字串回傳。dateObj.toString()               //    回傳字串,將日期物件轉成字串,Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)dateObj.toTimeString()           //    回傳字串,將日期物件轉成字串,14:39:07 GMT-0600 (PDT)
dateObj.getFullYear()dateObj.getMonth()               //    回傳數值,取得該日的月份,月份 0 表示 1 月!dateObj.getDate()                //    回傳數值,取得該日為該月份的幾號dateObj.getDay()                 //    回傳數值,取得該日為星期幾dateObj.getSeconds()             //    回傳數值,取得日期物件的秒資訊dateObj.getMinutes()             //    回傳數值,取得日期物件的分資訊分dateObj.getHours()               //    回傳數值,取得日期物件的小時資訊dateObj.valueOf()                //    回傳日期物件,和 getTime 效果一樣
dateObj.setDate(dayValue)        //    回傳 timestamp,設定 dateObj 的日期,同時改變 dateObjdateObj.setFullYear(dayValue)

常用方法#

將取得的 timestamp 轉成可讀的時間#

因為一般 timestamp 取得的是秒數,但在 JavaScript 中要帶入的是毫秒,所以要 new Date(timestamp * 1000)

let timestamp = 1513598707;new Date(1513598707 * 1000); // 因為一般 timestamp 取得的是秒數,但要帶入的是毫秒,所以要乘 1000
// 或者let date = new Date(timestamp * 1000);dataValues = [  date.getFullYear(),  date.getMonth() + 1,  date.getDate(),  date.getHours(),  date.getMinutes(),  date.getSeconds(),];console.log(dataValues);

根據今天用來增減時間#

/** * setDate 的方法會回傳時間戳記,同時 theDay 這個時間物件的值會改變 **/
let theDay = new Date(); // 建立時間物件let changeDay = 30; // 設定要往前或往後幾天let timeStamp = theDay.setDate(theDay.getDate() + changeDay); // theDay.getDate() 是用來取得今天是幾號
console.log(theDay.toISOString()); // 把物件轉成字串

轉成 ISO 8601 的格式,並且捨去小數點#

dateObj.toISOString().split('.')[0] + 'Z';

把秒數改成時分秒#

let totalSeconds = 6384053;
let hours = Math.floor(totalSeconds / 3600); // Math.floor 無條件捨去let mins = Math.floor((totalSeconds % 3600) / 60);let seconds = (totalSeconds % 3600) % 60;
console.log(hours, mins, seconds);

多時區處理#

  • UTC 指的是世界協調時間(Coordinated Universal Time)。
  • GTM 指格林威治標準時間(Greenwich Mean Time)。
  • GMT 和 UTC 在一般使用的情況下沒有差別,你要說台灣的時區是 UTC+8 或是 GMT+8 都可以。
  • 偏移(offset)指的是某地區與 UTC 偏移的時間,例如 +08:00,表示該地區的時間比 UTC 快了 8 小時。
  • 夏日時間(Daylight Saving Time, DST)
/** * 沒有寫時區的話,預設就會抓當地時區的時間 **/
new Date('2017-07-09 00:00:00'); // Sun Jul 09 2017 00:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 00:00:00
new Date('2017-07-09 00:00:00 +0800'); // Sun Jul 09 2017 00:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 00:00:00
// For FireFoxnew Date('2017-07-09T00:00:00+0800'); // Sun Jul 09 2017 00:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 00:00:00
/** * 下面這三種都會得到一樣的時間 **/
// 有寫時區的話,會以給定時區的時間,回傳當地時區的時間new Date('2017-07-09 00:00:00 +0000'); // Sun Jul 09 2017 08:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 08:00:00
// 沒寫時間的話,會以 UTC(+0)的 00:00 為時間,回傳當地時區的時間new Date('2017-07-09'); // Sun Jul 09 2017 08:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 08:00:00
// 寫 UTC 或以 ISO 時間表示的話,就是 UTC(+0)的時間,回傳當地時間的時間new Date('2017-07-09 00:00:00 UTC'); // Sun Jul 09 2017 08:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 08:00:00
new Date('2017-07-09T00:00:00Z'); // Sun Jul 09 2017 08:00:00 GMT+0800 (CST)// toLocaleString(): 2017-7-9 08:00:00

把時間寫入 db 前要先將時間轉成 UTC 時間(+0)#

let localeTime = '2017-07-09 00:00:00'; // 給當地時區的時間let localeTimeObj = new Date(localeTime);
localeTimeObj; // Sun Jul 09 2017 00:00:00 GMT+0800 (CST)localeTimeObj.toUTCString(); // 轉成 UTC(+0)的時間,Sat, 08 Jul 2017 16:00:00 GMT
localeTimeObj.toString(); // String Sun Jul 09 2017 00:00:00 GMT+0800 (CST)localeTimeObj.toLocaleString(); // 2017-7-9 00:00:00

從 db 拿回來的 UTC(+0)時間要轉回當地時間#

let UTCTime = '2017-07-09T00:00:00Z'; // 從 DB 拿回來的 UTC/ISO 時間let UTCTimeObj = new Date(UTCTime);
UTCTimeObj; // Sun Jul 09 2017 08:00:00 GMT+0800 (CST)UTCTimeObj.toString(); // Sun Jul 09 2017 08:00:00 GMT+0800 (CST)UTCTimeObj.toLocaleString(); // 轉成 UTC(+8)的時間,2017-7-9 08:00:00

格式化時間#

參考#

Date @ MDN