【问题标题】:How to set WP Cron job timestamp according to timezone?如何根据时区设置 WP Cron 作业时间戳?
【发布时间】:2023-03-23 23:17:02
【问题描述】:

我在午夜使用服务器 cron 作业来安排 WP 事件,以向客户发送有关其过期产品的更新。无论我写什么,时间都会转换为我的 UTC+5 时区。

PHP 代码:

function register_daily_expired_products_event() {
    if (!wp_next_scheduled('send_emails')) {

        // Schedule daily expired products event
        wp_schedule_event(strtotime('today midnight'), 'daily', 'ptmp_notify_customers');
    }
}

add_action('init', 'register_daily_expired_products_event');

function ptmp_send_product_expiry_emails() {
    // Custom code
}

// Notify customers with their expired products
add_action('ptmp_notify_customers', 'ptmp_send_product_expiry_emails');

使用 WP Crontrol 插件测试的 cron 作业事件,根据我的时区 (UTC+5) 显示 +5 小时。例如

时间应该是: 2017-07-08 00:00:00

但实际上: 2017-07-08 05:00:00(加5小时)

服务器 cron 作业在 12:00 AM 准确运行,但在后端,该事件还有 5 个小时以上,尚未准备好执行。因此,即使客户当天的产品已过期,也不会发送任何电子邮件。任何帮助将不胜感激。 谢谢!

【问题讨论】:

    标签: php mysql wordpress cron


    【解决方案1】:

    如果我对您的理解正确,您希望将服务器端 cronjob 执行时间调整为您的用户时区。

    有两种方法,你可以做到。

    a) 所有用户都在同一个时区

    如果您的客户都在同一个时区,您必须使您的 cronjob 执行时间适应该特定时区。

    b) 用户有不同的时区

    如果您的客户不在同一个时区,您必须每小时(或每 30 分钟、15 分钟...)运行一次 cronjob,并根据您的用户时区检查时间。

    所以你的 cronjob(即每小时)应该做这样的事情:

    1. 获取所有过期产品
    2. 获取产品所属用户的时区
    3. 检查当前时间是否在用户时区的 00:00 左右
    4. 如果有,请发送通知电子邮件

    查看有关如何设置时区的官方 PHP 文档: http://php.net/manual/de/datetime.settimezone.php

    【讨论】:

    • 感谢您提供详细的说明。它也帮助了我。我的问题是如何根据我的时区获取时间戳。因为这个时间加上 UTC 的 5 小时。时间应该是:2017-07-08 00:00:00 但实际上:2017-07-08 05:00:00(加5小时)UTC+5
    猜你喜欢
    • 2016-12-12
    • 1970-01-01
    • 2012-05-03
    • 2018-04-15
    • 1970-01-01
    • 2019-05-23
    • 2011-07-09
    • 2020-09-30
    • 2016-01-29
    相关资源
    最近更新 更多