JS 時區轉換

tags: 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

取得 unix timestamp 使用 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

將 timestamp 轉成某時區的時間使用 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