問題描述

我有一個 WordPress cron 工作,定期傳送電子郵件,作為選項傳送時儲存時間戳,我想在設定頁面上顯示一個日期。像 「最後一封電子郵件是在’x’ 傳送的」 。我在美國的西海岸,所以我們現在的時間是 UTC 的七個小時。

我從 date_i18n() 的預期輸出,傳遞它的時間戳,將是本地格式化的日期,從 UTC 調整七個小時。但是,它返回 UTC 的時間。即使想要獲得當前時間也不會返回我認為是預期的輸出。

例如:echo date_i18n('F d, Y H:i'); 輸出 2013 年 4 月 5 日 11:36,但 echo date_i18n('F d, Y H:i',time()); 輸出 2013 年 4 月 5 日 18:36 。

這是有意的嗎?如何從預先存在的時間戳返回本地格式的日期?感謝任何幫助。

最佳解決方案

我知道我已經三個月了,但你想要的功能是 get_date_from_gmt()

該函式接受 Y-m-d H:i:s 格式的 GMT /UTC 日期作為第一個引數,您希望的日期格式作為第二個引數。它會將您的日期轉換為 「設定」 螢幕上設定的本地時區。

使用示例

echo get_date_from_gmt( date( 'Y-m-d H:i:s', $my_unix_timestamp ), 'F j, Y H:i:s' );

次佳解決方案

codex

current_time(‘timestamp’) should be used in lieu of time() to return the blog’s local time. In WordPress, PHP’s time() will always return UTC and is the same as calling current_time(‘timestamp’, true).

嘗試這個:

define( 'MY_TIMEZONE', (get_option( 'timezone_string' ) ? get_option( 'timezone_string' ) : date_default_timezone_get() ) );
date_default_timezone_set( MY_TIMEZONE );
echo date_i18n('F d, Y H:i', 1365194723);

這將在指令碼的持續時間內將預設的 PHP 日期設定為 WP 的 timezone_string 選項 (如果可用) 。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。