我在 PHP 裡對資料庫寫入一個時戳時間 (timestamp),假設是 1717689600 好了,我預期它應該是 2024/06/07,但是從 SQL Server (MSSQL) 取出後,它卻變成 2024/06/06。

我用 Epoch & Unix Timestamp Conversion Tools 線上轉換了 timestamp,發現這個時間原來是這樣:

  • GMT: 2024年6月6日 星期四 16:00:00
  • 台北時間:2024年6月7日 星期五 00:00:00 GMT+08:00

所以,原本我想要把這個 timestamp 處理成 "yyyy/mm/dd" 的格式,做了以下 SQL:

select convert(
  
varchar(10),
  DATEADD(SECOND, cast(1717689600 as int), '19700101 00:00:00:000'),
  111
);

我需要利用 UTC 時間與在地時間的差異,來把它還原回正確的時間,所以我把 SQL 修改成:

select convert(
  
varchar(10),
  DATEADD(hour, DATEDIFF (hour, GETUTCDATE(), GETDATE() ),
  DATEADD(SECOND, cast(1717689600 as int), '19700101 00:00:00:000') ),
  111
);

原本想要用 "at time zone" 來轉換時間,但是我不會,哪天等我會了再補上來 []~( ̄▽ ̄)~*

轉換的寫法可參考:How to convert server timezone to local timezone for SQL server database

在 MSSQL 可以使用的所有的時區,可以參考微軟的 "List of supported time zones"

arrow
arrow
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(0) 人氣()