如何强制 the_date() / get_the_date() 使用特定区域设置
Wordpress 函数 the_date() 和 get_the_date() 始终以当前 Wordpress 安装的语言设置定义的区域格式返回日期/时间。
如果你需要以特定区域设置(例如英语)获取日期怎么办?
将 wordpress 语言设置为目标区域设置可以成功实现这一点,但也会更改 Wordpress 其他部分的语言,因此通常不是一个选项。
如果你不能这样做并且必须找到编程解决方案,这是我强制
<?php the_date('r', '', '', TRUE); ?>
使用特定区域设置(在此例中为 "C" 即纯英语)的方法
<?php
setlocale(LC_TIME, "C"); // 设置为目标区域设置(你希望日期以此格式化)
echo strftime("%a, %d %b %Y %H:%M:%S %z", get_post_time('U', TRUE)); // 解析 wordpress 时间并再次格式化
setlocale(LC_TIME, "de_DE"); // 设置回原始区域设置!
?>
由于 the_date() 忽略 setlocale() 调用,我们使用 PHP 的 strftime() 来解决此问题。
首先,我们使用 setlocale(LC_TIME, "C"); 设置目标区域设置(日期要格式化的区域设置)。将 "C" 替换为你的目标区域设置!如果你想要纯英语,"C" 是个好选择。
然后,我们使用 get_post_time('U', TRUE); 获取文章日期和时间(the_date() 和 get_the_date() 使用/返回的相同日期和时间)。"U" 表示作为 Unix 时间戳返回。TRUE 在这里非常重要,因为它告诉 get_post_time() 返回 UTC 时间戳。如果你不在这里使用 TRUE,你的日期将偏移几个小时(取决于你的时区),以防它们还不是 UTC。
之后,我们运行 strftime() 格式化时间戳。你需要在此处插入你想要的格式字符串。在我的情况下,格式字符串是 "%a, %d %b %Y %H:%M:%S %z",这是 RFC2822 日期。注意使用此方法,时区(%z)将始终为 +0000,因为它被格式化为 UTC 日期。但是,时区偏移将被正确计算。
作为最后一步,我们使用 setlocale(LC_TIME, "de_DE"); 重新设置原始区域设置。这避免影响其他函数,例如其他插件中的函数。你需要在此处插入正确的(原始)区域设置。在我的情况下,我知道正确的区域设置是 "de_DE",但在你的情况下可能不同。