【JS學習筆記】Date 時間函數

  JavaScript 沒有日期資料型態,所以提供了 Date 物件來指向某一個時間點,基於世界標準時間(UTC)1970年1月1日開始的毫秒數值來儲存時間。如果沒有特指時區,一般會抓系統預設的時區。

獲取時間

Date.now(); //回傳當前 timestamp(毫秒)
new Date(); //回傳目前時間日期物件

回傳值

1586060504384
Sun Apr 05 2020 12:21:44 GMT+0800 (台北標準時間)

因為它不是瀏覽器必然存在的物件,所以用 new 來產生它。
如果將之作為一般函數呼叫(不使用 new)不會產生物件實體;參數會被忽略一律傳回目前時間的字串而非Date物件。

Timestamp(時間戳)

+new Date()

你可以使用 +new Date() 獲取當前時間的時間戳↓

var timestamp = (+new Date());
console.log(timestamp);

回傳 1586064325118

Date.now()

或者使用 Date.now() 方法回傳自 1970/01/01 00:00:00 UTC 起經過的毫秒數。

let timest = Date.now();
console.log(timest);

會得到

1586061297150

由於 now() 是 Date 的靜態方法,你只能用 Date.now() 的方式呼叫它。

Date.parse()

也可以用使用Date.parse()輸出1970-1-1 00:00:00 UTC至今經歷的毫秒數。

const time = Date.parse('March 14 2020');
const time = Date.parse('2020/04/15 00:12:30');

時間戳轉換

那這一串毫秒一般人怎麼能看懂呢?所以我們需要轉換它。

let timestamp = Date.now();
let date = new Date(timestamp);
time = [
  date.getFullYear(),
  date.getMonth() + 1,
  date.getDate(),
  date.getHours(),
  date.getMinutes(),
  date.getSeconds(),
];
console.log(time);

本來是 1586062413222 變為 [2020, 4, 5, 12, 53, 33] ,是不是容易多了?但要注意的是這種寫法會存為陣列,若需要讀取年份就取time[0]…以此類推。

Date的常用方法

var date = new Date();  //返回當日的日期和時間。
date.getDate();  // 從 Date 對象返回一個月中的某一天 (1 ~ 31)。
date.getDay();  //從 Date 對象返回一周中的某一天 (0 ~ 6)。
date.getMonth();  //從 Date 對象返回月份 (0 ~ 11)。
date.getFullYear();  //從 Date 對像以四位數字返回年份。
date.getYear();  //請使用 getFullYear() 方法代替。
date.getHours();  //返回 Date 對象的小時 (0 ~ 23)。
date.getMinutes();  //返回 Date 對象的分鐘 (0 ~ 59)。
date.getSeconds();  //返回 Date 對象的秒數 (0 ~ 59)。
date.getMilliseconds();  //返回 Date 對象的毫秒(0 ~ 999)。
date.getTime();  //返回 1970 年 1 月 1 日至今的毫秒數。
date.getTimezoneOffset();  //返回本地時間與格林威治標準時間 (GMT) 的分鐘差。
date.toString()  //把 Date 對象轉換為字符串。
date.toTimeString()  //把 Date 對象的時間部分轉換為字符串。
date.toDateString()  //把 Date 對象的日期部分轉換為字符串。
date.toLocaleString();  //獲取日期與時間
date.toLocaleTimeString();  //根據本地時間格式,把 Date 對象的時間部分轉換為字符串。
date.toLocaleDateString();  //根據本地時間格式,把 Date 對象的日期部分轉換為字符串。
date.setDate();  //回傳timestamp,可用來增減時間。
date.getTimezoneOffset();  //返回本地時間與格林威治標準時間 (GMT) 的分鐘差。
date.getUTCDate();  //根據世界時從 Date 對象返回月中的一天 (1 ~ 31)。
date.getUTCDay();  //根據世界時從 Date 對象返回周中的一天 (0 ~ 6)。
date.getUTCMonth();  //根據世界時從 Date 對象返回月份 (0 ~ 11)。
date.getUTCFullYear();  //根據世界時從 Date 對象返回四位數的年份。
date.getUTCHours();  //根據世界時返回 Date 對象的小時 (0 ~ 23)。
date.getUTCMinutes();  //根據世界時返回 Date 對象的分鐘 (0 ~ 59)。
date.getUTCSeconds();  //根據世界時返回 Date 對象的秒鐘 (0 ~ 59)。
date.getUTCMilliseconds();  //根據世界時返回 Date 對象的毫秒(0 ~ 999)。
date.UTC();  //根據世界時返回 1970 年 1 月 1 日 到指定日期的毫秒數。
date.valueOf();  //返回 Date 對象的原始值。
//把get改成set 為 設定

getYear()的返回值

var date = new Date();
console.log(date.getYear());

  回傳值為 120 。此值代表 今年西元年份 – 1900 ,因此是距離1900年後的120年 = 2020年。大部分時候我都會用 getFullYear()而不會用getYear(),如果使用VSCode的朋友們用到時間函數時應該會發現提示不會有getYear()只會有getFullYear()。

使用setDate()增減時間

可用於增減時間,例如今天是2020/04/05,我想加 30 天,只需要使用 setDate( 現在時間 + 增減時間 ) ; 即可↓

let date = new Date();
let timestamp = date.setDate(date.getDate() + 30);

date 回傳

Tue May 05 2020 13:02:44 GMT+0800 (台北標準時間)

timestamp 回傳

1588654964868

使用date.toISOString() 回傳

2020-05-05T05:02:44.868Z

toISOString()格式

toISOString()方法使用ISO標準將Date對象轉換為字符串。

該標準稱為ISO-8601,格式為:YYYY-MM-DDTHH:mm:ss.sssZ

var d = new Date(); //Sun Apr 05 2020 13:17:39 GMT+0800 (台北標準時間)
var n = d.toISOString(); //2020-04-05T05:17:39.661Z

使用 toLocaleString 獲得各時區時間

基本用法

var date = new Date();
console.log(date.toLocaleString());

回傳

2020/4/5 下午1:40:51

加上locales和options參數

格式↓

dateObj.toLocaleString('locales',{options});

我們可以加上時區

dateObj.toLocaleString('locales',{timeZone:'時區'});

×例如要使用臺灣表示法輸出台北時間可以這麼寫↓

var time = new Date().toLocaleString('zh-TW', {
  timeZone: 'Asia/Taipei'
});
console.log(time);

回傳 2020/4/5 下午1:34:36

×若要使用南韓表示法輸出台北時間則寫成↓

var time = new Date().toLocaleString('ko-KR', {
  timeZone: 'Asia/Taipei'
});
console.log(time);

回傳 4. 5. 오후 1:34:36

×使用美國表示法輸出美國紐約時間↓

var time = new Date().toLocaleString('en-US', {
  timeZone: 'America/New_York'
});
console.log(time);

回傳 4/5/2020, 1:34:36 AM

24小時制

Options還有許多用法,比如切換成24小時制

var time = new Date().toLocaleString('zh-TW', {
  timeZone: 'Asia/Taipei',
  hour12: false
});

回傳

2020/4/5 13:58:03  //原為 2020/4/5 下午1:58:03

自定義時間設定格式

年份和日期為numeric,月份和星期為long

var date = new Date();
var options = {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric'
};
console.log(date.toLocaleString('en-US', options));

回傳

Sunday, April 5, 2020

Timezone及Locale:全球時區列表Locale

取得某月份天數

var days = new Date(2020, 2, 0).getDate();
console.log(days);

回傳 29

計算時間差

let time1 = new Date(2020,04,05);
let time2 = new Date(2020,05,10);
console.log((time2-time1) / (1000*60*60*24)); //將毫秒計算成天數

將毫秒計算成天數 => 1000(毫秒轉換成秒) * 60 (一分鐘60秒) * 60 (一小時60分鐘) * 24 (一天24小時) = 86400000 ms /天

或者你也可以 …

20200405052249 【JS學習筆記】Date 時間函數

參考資料

0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論