问题描述

我有一个 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。