Strtotime 不能用于与元值进行比较

Posted

技术标签:

【中文标题】Strtotime 不能用于与元值进行比较【英文标题】:Strtotime can't be used for comparison with meta value 【发布时间】:2018-07-16 13:34:45 【问题描述】:

我正在使用 WooCommerce,并尝试检查是否存在逾期付款。每天下午 6 点之后支付的任何订单(有时支付网关有点慢),都会恢复到“暂停”状态。我希望此处理仅适用于明天交货日期的订单。

这不起作用(“暂停”状态从未实现):

add_action( 'woocommerce_order_status_processing', 'check_late_payment' );

function check_late_payment( $order_id )
    date_default_timezone_set('Asia/Jakarta');
    if (time() > strtotime("18:00:00")) 
        $order = wc_get_order( $order_id );
        if ( get_post_meta( $order_id, '_orddd_timestamp', true ) == strtotime('tomorrow') ) 
            $order->update_status( 'on-hold' );
               
    

但是,这是有效的:

add_action( 'woocommerce_order_status_processing', 'check_late_payment' );

function check_late_payment( $order_id )
    date_default_timezone_set('Asia/Jakarta');
    if (time() > strtotime("18:00:00")) 
        $order = wc_get_order( $order_id );
        if ( get_post_meta( $order_id, '_orddd_timestamp', true ) == '1531785600' ) 
            $order->update_status( 'on-hold' );
               
    

唯一的区别是 strtotime 和常量字符串。我检查了元值,它与 strtotime ('明天')完全相同。 任何想法为什么这不起作用? 因为我需要它始终是明天的时间戳

谢谢。

【问题讨论】:

为什么要与单个固定的 unix 时间戳值进行比较?你知道这不是“一天”,而是一秒钟,对吧?因此,您想要在这里获得的所有相关订单,都将当天的特定秒数设置为订单时间戳......? 您是否尝试将strtotime('tomorrow') 分配给变量并进行比较? @CBroe 你说得对,所有交货日期格式都设置为该特定时间,日期为 00:00:00。这很不寻常,我知道。 @OutsourceWordPress 是的,我确实尝试过,甚至将元值放在变量中并尝试比较它,但不起作用。 您是否尝试过回显strtotime('tomorrow'),它回显相同的“1531785600”(只是为了确认时区问题)? 【参考方案1】:

试试这个if ( get_post_meta( $order_id, '_orddd_timestamp', true ) == (string)strtotime('tomorrow') ),让我知道它是否有效。

【讨论】:

谢谢,我试过了,还是不行,条件没有触发。 您是否尝试过将 meta 和 'strtotime' 值作为字符串分配到单独的变量中并比较两者? 我做到了,这是我尝试的第一件事,但没有奏效。没关系,我将尝试使用不同的方法来解决这个问题,这样简单的任务已经花费了太多时间。感谢您的帮助我的朋友,感谢它。 那么你的元值数据应该有一些问题,最后尝试提醒一下。 其实我用了一个导出插件,它可以导出元值等。我明天和strtotime做了一个并排比较,它们完全一样,没有多余的空格或任何其他字符。奇怪..

以上是关于Strtotime 不能用于与元值进行比较的主要内容,如果未能解决你的问题,请参考以下文章

日期转换显示错误[重复]

排除元值空wordpress的帖子

PHP 使用strtotime比较日期

PHP 日期加减计算方法示例

获取当天是本月的第几周

GroovyMOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )