javascript
js 轉換時區常用套件 luxon 處理,記錄一下常用的使用方式
DateTime
類別DateTime
初始化可傳入一個時間,並告訴它 Time Zone 是什麼
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSQL('2022-01-10 12:00:00', { zone: 'Asia/Taipei'});
dateTime
物件就代表台北時間 2022-01-10 12:00:00
,如果沒有特別指定時間,預設是當下,如果沒有特別指定時區,就看 js 所在系統預設的時區,另外也可以使用 UTC 加減時間表示,例如 UTC +8 時區可用 { zone: '+0800 }'
表示、UTC -4 時區可用 { zone: '-0400' }
表示
setZone
method把本地預設時區現在轉成紐約時區的時間
const { DateTime } = require('luxon');
DateTime.setZone('America/New_York').toFormat('yyyy-LL-dd HH:mm:ss');
把本地預設時區 2022-01-10 12:00:00
轉成紐約時區的時間
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSQL('2022-01-10 12:00:00').setZone('America/New_York').toFormat('yyyy-LL-dd HH:mm:ss');
把台北時區現在轉成紐約時區的時間
const { DateTime } = require('luxon');
let dateTime = DateTime.local({ zone: 'Asia/Taipei'}).setZone('America/New_York').toFormat('yyyy-LL-dd HH:mm:ss');
把台北時區 2022-01-10 12:00:00
轉成紐約時區的時間
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSQL('2022-01-10 12:00:00', { zone: 'Asia/Taipei'}).setZone('America/New_York').toFormat('yyyy-LL-dd HH:mm:ss'); //2022-01-09 23:00:00
歐美多數地區都有夏令時區,冬天相差夏天一小時,例如紐約在冬天會是 UTC-5
,夏天則是 UTC-4
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSQL('2022-06-10 12:00:00', { zone: 'Asia/Taipei'}).setZone('America/New_York').toFormat('yyyy-LL-dd HH:mm:ss'); //2022-06-10 00:00:00
toSeconds
取得本地預設時區 2022-01-10 12:00:00
的 unix timestamp
const { DateTime } = require('luxon');
DateTime.fromSQL('2022-01-10 12:00:00').toSeconds();
取得台北時區 2022-01-10 12:00:00
的 unix timestamp
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSQL('2022-01-10 12:00:00', { zone: 'Asia/Taipei'}).toSeconds();
取得紐約時區 2022-01-10 12:00:00
的 unix timestamp
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSQL('2022-01-10 12:00:00', { zone: 'America/New_York'}).toSeconds();
備註說明:Unix timestamp 定義為從格林威治時間1970年01月01日00時00分00秒至現在的總秒數,不管任何時區同一刻的 timestamp 會是一樣的。以台北-紐約一月相差 13 小時為例,台北時區 2022-01-10 12:00:00
的 unix timestamp 對應的紐約時區時間是 2022-01-09 23:00:00
,因為台北時區時間 2022-01-10 12:00:00
這一刻的紐約時區時間是 2022-01-09 23:00:00
。而紐約時區 2022-01-10 12:00:00
的 unix timestamp 對應的台北時區時間是 2022-01-11 01:00:00
fromSeconds
+ toFormat
將 timestamp 1656604800 轉成本地預設時區時間
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSeconds(1656604800).toFormat('yyyy-LL-dd HH:mm:ss')();
將 timestamp 1656604800 轉成台北時區時間
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSeconds(1656604800).setZone('Asia/Taipei').toFormat('yyyy-LL-dd HH:mm:ss')(); //2022-07-01 00:00:00
將 timestamp 1656604800 轉成紐約時區時間
const { DateTime } = require('luxon');
let dateTime = DateTime.fromSeconds(1656604800).setZone('America/New_York').toFormat('yyyy-LL-dd HH:mm:ss')(); //2022-06-30 12:00:00