PHP - Параўнанне лакальнага і UTC часу са зрушэннем гадзіннага пояса (PHP - Local vs UTC Time Comparison with Timezone Offset)


問題描述

PHP ‑ Параўнанне лакальнага і UTC часу са зрушэннем гадзіннага пояса (PHP ‑ Local vs UTC Time Comparison with Timezone Offset)

Given a variable unix timestamp and a fixed timezone offset in seconds, how can you tell if local time is past 8am.  

For example, take the following variables:

$timestamp = time();
$timezone_offset = ‑21600;  //i think that's ‑8hrs for pacific time

‑‑‑‑‑

參考解法

方法 1:

if(date("H", $timestamp + $timezone_offset) >= 8){
    // do something
}

Assuming you consider even a millisecond past 8:00:00 is "past 8am".

方法 2:

You set your timezone in PHP using date_default_timezone_set() and then use PHP's datetime functions like date or DateTime object to check the time according to the set timezone. PHP will do the right thing for you and adjust the time to the specified timezone.

$timestamp = 1354794201;
date_default_timezone_set("UTC"); // set time zone to UTC
if (date("H", $timestamp) >= 8) { // check to see if it's past 8am in UTC
    echo "This time stamp is past 8 AM in " . date_default_timezone_get() . "\n";
}

date_default_timezone_set("America/New_York"); // change time zone
if (date("H", $timestamp) >= 8) { // Check to see if it's past 8am in EST
    echo "This time stamp is past 8 AM in " . date_default_timezone_get() . "\n";
}

Output from this code

/* This time stamp is past 8 AM in UTC */

You can do the same thing with DateTime as well...

$timestamp = 1354794201;
$date = new DateTime("@{$timestamp}"); // create the DateTime object using a Unix timestamp
$date‑>setTimeZone(new DateTimeZone("UTC")); // set time zone to UTC
if ($date‑>format("H") >= 8) { // check to see if it's past 8am in UTC
    echo "This time stamp is past 8 AM in {$date‑>getTimezone()‑>getName()}\n";
}

$date‑>setTimeZone(new DateTimeZone("America/New_York")); // change time zone
if ($date‑>format("H") >= 8) { // Check to see if it's past 8am in EST
    echo "This time stamp is past 8 AM in {$date‑>getTimezone()‑>getName()}\n";
}

Output from the above code is also...

/* This time stamp is past 8 AM in UTC */

Unix time is time zone agnostic. That's the point of using Unix time as a transport layer. You never have to worry about time zones until it comes time to translate your time stamp from Unix time to a formatted date.

(by VinnyDMichaelSherif)

參考文件

  1. PHP ‑ Local vs UTC Time Comparison with Timezone Offset (CC BY‑SA 3.0/4.0)

#utc #Date #PHP






相關問題

Java - 從外部服務器獲取 POSIX UTC 時間戳的最佳選擇? (Java - Best choice to get a POSIX UTC timestamp from external server?)

PHP - Параўнанне лакальнага і UTC часу са зрушэннем гадзіннага пояса (PHP - Local vs UTC Time Comparison with Timezone Offset)

以 UTC 格式轉換日期時間 (Convert date time in utc)

如何確定日期字符串是否包含已在 Javascript 中添加的時間偏移量? (How to figure out if the Date string contains time offset added already in Javascript?)

Delphi - Tải TTimeZone cho múi giờ không thuộc địa phương và chuyển đổi giữa các múi giờ (Delphi - Get TTimeZone for non-local timezone and convert between timezones)

什麼是“標準”時區縮寫? (What are the "standard" timezone abbreviations?)

如何從包含 Oracle 中時區偏移的日期/時間字符串中獲取 UTC 日期/時間 (How to get UTC date/time from a date/time string that contains timezone offset in Oracle)

如何在不使用 Javascript 的情況下在 ASP.Net 中呈現給定 UTC 日期時間值的本地時間? (How to render local time given UTC datetime values in ASP.Net without using Javascript?)

如何讓 Java 解析和格式化具有相同時區的日期/時間?我一直在獲取本地時區 (How do I get Java to parse and format a date/time with the same time zone? I keep getting the local timezone)

Python - 從 DST 調整的本地時間到 UTC (Python - From DST-adjusted local time to UTC)

7 位小數計算的 UTC 時間 (UTC time with 7 decimals calculation)

我們應用程序中的日期格式 (Date format in our Application)







留言討論