第1部分。时间!=时间戳
这是您的问题:
每午夜本地时间戳
没有本地时间戳这样的东西。时间戳没有时间分区,不是WP使用UTC,而是UTC时间戳正好是+0小时。
如果希望它发生在当地时间午夜,则需要将该时间转换为时间戳,UTC是最简单的方法。例如,英国夏令时午夜是UTC时间11点,因此我需要为11点安排一个cron作业,以便它在午夜运行。如果我将cron作业设置为在00:00运行,那么这将是当地时间凌晨1点,这不是我想要的。
因此,请获取所需的本地化时区时间,并在代码中将其转换为UTC。如果需要显示数学,您可以随时在以后撤消它。
e、 g.这里我们采用UTC日期并将其更改为莫斯科时间:
$date = new DateTime(\'2012-07-16 01:00:00 +00\');
$date->setTimezone(new DateTimeZone(\'Europe/Moscow\')); // +04
echo $date->format(\'Y-m-d H:i:s\'); // 2012-07-15 05:00:00
这里我们使用曼谷时间并将其转换为UTC:
$given = new DateTime("2014-12-12 14:18:00 +07");
echo $given->format("Y-m-d H:i:s e") . "\\n"; // 2014-12-12 14:18:00 Asia/Bangkok
$given->setTimezone(new DateTimeZone("UTC"));
echo $given->format("Y-m-d H:i:s e") . "\\n"; // 2014-12-12 07:18:00 UTC
如果您仍然希望在本地时间指定内容,只需编写一个函数来进行转换,例如:。
$utc_time = convert_to_utc( "time in local timezone")
第2部分。为什么选择UTC
你有没有注意到为什么一些时区被引用为
+8 小时或
-2? 这将是UTC+8或UTC-2。UTC也称为协调世界时。
它是我们日常使用的所有常用时间系统的基础标准。因此,您的本地时间被定义为UTC的某个偏移量。
那么我可以让WP使用本地时区作为时间戳吗
如果WP使用本地时间存储所有内容,那么更改本地时间将涉及修改数据库中的每个时间戳。这将导致与其他API的通信出现问题。这也会导致插件和主题出现问题,这些插件和主题试图从UTC转换到您的本地时区,使偏移量加倍,并导致复合错误。它还可能导致REST API、双因素身份验证等问题
这是一个非常糟糕的主意。它还破坏了站点上时间戳的基本系统。
这样想吧。您可以在WordPress中看到带有时区修饰符的时间和日期。当WP存储数据时,它会去掉修改器,并将其存储为所有WP站点和计算机都能理解的标准值。然后,无论何时显示日期,它都会重新应用时区修饰符。