[英]Converting UTC timestamp string to UNIX timestamp number - Javascript vs PHP
不要用以下內容回答這個問題:
- “Javascript UNIX 時間戳以毫秒為單位,PHP UNIX 時間戳以秒為單位”
- “Javascript 在瀏覽器中運行,PHP 在服務器上運行,時鍾可能不匹配”
對此效果的任何答案都將被否決!
我遇到了一個問題,即在完全相同的計算機上,Node.js 和 PHP 在將 UTC 時間戳字符串轉換為 UNIX 時間戳整數時會產生不同的時間戳。
PHP中的參考代碼:
$a = '2022-07-20T17:30:28.771';
list($b, $c) = explode('.', $a);
$d = strtotime($b) * 1000 + ((int) $c);
// $d is 1658338228771 ms
在 Javascript 中:
const a = '2022-07-20T17:30:28.771';
const b = new Date(a);
const d = b.valueOf();
// d is 1658352628771 ms
看到不同:
PHP: 1658338228771 milliseconds
Node.js: 1658352628771 milliseconds
差值正好是 14400000 毫秒(4 小時)。
由於我在 EDT 時區 (UTC-4:00),這可能解釋了差異。 我的問題是,我該如何調整?
將 UTC 時間戳轉換為在 PHP 和 Javascript 中都匹配的毫秒精度的 UNIX 時間戳的正確過程是什么?
在進一步調查中,我的 PHP 默認時區設置為 UTC,因此時間戳被解釋為 UTC。
另一方面,Javascript 將其解釋為本地時間戳。
無論時區設置如何,要可靠地將 UTC 時間戳轉換為 UNIX 時間戳,我需要這樣做:
在 PHP 中:
$a = '2022-07-20T17:30:28.771Z';
$b = new DateTime($a);
$d = (int) $b->format('Uv');
// 1658338228771
在 Javascript 中:
const a = '2022-07-20T17:30:28.771Z';
const b = Date.parse(a);
const d = b.valueOf();
// 1658338228771
在這兩種情況下,重要的是 UTC 時間戳以Z
結尾,以便解析器知道將其視為 UTC。
$dateTime = new DateTime('2022-07-20T17:30:28.771', new DateTimeZone('UTC'));
$dateTime->add(new DateInterval('PT4H'));
echo $dateTime->format('Uv');
打印與您的 javascript 代碼相同。
1658352628771
你可以用那個...
const UTC_timestamp = YMD_hmsx => // date string conversion to UTC timestamps { let [Y,M,D,h,m,s,x] = YMD_hmsx.split(/\-|T|\:|\.|\Z/).map(Number) return new Date(Date.UTC(Y,--M,D,h,m,s,x)).getTime() } console.log( UTC_timestamp('2022-07-20T17:30:28.771') ) // return -> 1658338228771 , same as PHP
.as-console-wrapper {max-height: 100% !important;top: 0;} .as-console-row::after {display: none !important;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.