继夫的玩弄H辣文的小说|女人与拘性猛交视频|精品欧美高清不卡高清|一起做亏亏的事情的视频|啦啦啦在线视频观看|望月直播下载ios版本|国产日韩欧美一区二区三区

告別相差8小時問題,在 WordPress 正確使用 Date 和 Time

使用 Date 和 Time 是 WordPress 第三方開發者非常日常的工作,我們知道 PHP 提供了非常多的時間相關的函數和類,但是 WordPress 對時間的處理 , 有自己一套的邏輯 。
很多人剛開始在 WordPress 處理時間相關的功能或者問題的時候,經常碰到一些意外的情況,這是因為對 WordPress 的一些設置和處理邏輯不熟悉造成的 。下面講解下在 WordPress 中使用 Date 和 Time 的經驗和坑:
UTC 時區
在 PHP 中,我們可以使用 date 函數格式化一個時間戳,比如:
echo date(Y-m-d H:i:s, 1669043745); // 2022-11-21 23:15:45如果我們在 WordPress 也這么使用 , 將會輸出:2022-11-21 15:15:45,將會相差8小時,這是為什么呢?
因為 WordPress 為了防止因為系統不同設置造成的問題,先把默認的時區設置為 UTC,也就是格林威治標準時間,和北京時間正好差8個小時 。這個是在 wp-settings.php 大概 68行的位置:
// WordPress calculates offsets from UTC. // phpcs:ignore WordPress.DateTime.RestrictedFunctions.timezone_change_date_default_timezone_set date_default_timezone_set( UTC );wp_date那么在 WordPress 要正確基于時間戳顯示當地的時間如何辦呢?使用 wp_date 函數:
echo wp_date(Y-m-d H:i:s, 1669043745); // 2022-11-21 23:15:45這個函數將會自動獲取在 WordPress 后臺設置的時區(如下圖所示),然后按照該時區格式化時間戳 。
所以在 WordPress 進行格式化時間戳操作的時候,只需要記住這條規則:把 date 函數替換成 wp_date 函數即可 。
除了能夠正確獲取本地時區之外 , wp_date 函數還能進行一些本地化工作 。

告別相差8小時問題,在 WordPress 正確使用 Date 和 Time

文章插圖
比如要使用如上圖所示后臺設置的日期和時間格式顯示當前的時間:
$date_format = get_option(date_format); $time_format = get_option(time_format); echo wp_date("{$date_format} {$time_format}"); // 2022年11月21日 下午23:15wp_timezonewp_date 函數之所以能夠正確顯示時間,是因為 WordPress 提供了兩個時區的函數,他們能夠正確返回后臺設置的時區:
wp_timezone_string() 用于獲取當前站點的時區,后臺無論是通過 timezone_string(比如: Asia/Shanghai )還是 gmt_offset(比如:UTC+8)方式設置都可以 。wp_timezone() 也是獲取當前站點的時區,但是返回的是 DateTimeZone 對象 。wpjam_strtotime
前面解決了在 WordPress 中基于時間戳正確顯示時間的問題,然后還有一個常見的操作就是將日期轉換為日期戳,PHP 提供了一個 strtotime 的函數:
echo strtotime("2022-11-21 23:15:45"); // 1669072545和上面輸入的 1669043745 也是相差 8×3600 , 也是8小時,同樣的原因 , 這個函數也是基于系統默認的時區的,前面可知 , WordPress 設置默認的時區是 UTC 時區 。
所以為了方便將當地時間正確轉換成時間戳,所以我寫了一個函數 wpjam_strtotime:
function wpjam_strtotime($string){ return date_create($string, wp_timezone())->getTimestamp(); }利用前面介紹的 WordPress 提供的函數 wp_timezone() , 這個獲取時間戳:
echo wpjam_strtotime("2022-11-21 23:15:45"); // 1669043745wpjam_strtotime 很快會在 WPJAM Basic 新版本中發布,所以有了第二條規則:在 WordPress 進行日期和時間轉換成時間戳操作的時候,把 strtotime 函數替換成 wpjam_strtotime 函數即可 。
總結
一句話總結,我們在 WordPress 中可以使用 Date 和 Time 做很多事情,但是一定使用 WordPress 方式,WordPress 方式 , 我也總結為兩條規則:
進行格式化時間戳操作的時候:
把 date 函數替換成 wp_date 函數 。將日期和時間轉換成時間戳的時候:
【告別相差8小時問題,在 WordPress 正確使用 Date 和 Time】把 strtotime 函數替換成 wpjam_strtotime 函數 。