在PHP 8.0中计算两个日期之间的差值(包括负间隔),用于从今天算起2天或更短的日期

dxpyg8gm  于 2022-12-17  发布在  PHP
关注(0)|答案(1)|浏览(143)

我正在使用下面的代码来更改woocommerce网站中订单的状态,当给定字段'ship_by_date_dont_edit'在2(或更少)天的今天日期(通过cron job).一切都很好,但我也需要考虑负天数,因为有时我们会得到最后一分钟的紧急订单,“按日期发货”将被设置为过去的日期.经过测试,似乎不包括小于0的天数,因此这些订单的状态不会改变。我希望得到一些帮助,以便我的函数适用于2天以内的日期(或更少,包括负数)。
下面是原始的(凌乱的)代码:

//==== status change to 'preparing to ship'
add_action( 'new_cron_status_update_lessthan_two_days', 'wp_order_status_update', 10, 1 );
function wp_order_status_update() {
    global $wpdb;
    $my_query = "SELECT * FROM wp_wc_order_stats where STATUS='wc-processing'";
    $result2 = $wpdb->get_results($my_query);
    foreach ($result2 as $results2) {
        $order_id = $results2->order_id;
        $thisacof7 = get_post_meta( $order_id, 'ship_by_date_dont_edit', true );
        $date1=$thisacof7; // date("Y-m-d h:i:s");
        $thisdate=date("Y-m-d h:i:s");
        $dateStart = new DateTime($date1);
        $datetoday = new DateTime($thisdate);
        $dteDiff = $dateStart->diff($datetoday);
        $Diff = $dteDiff->format("%a");
        if($Diff<2) {
            $order = new WC_Order($order_id);
            if (!empty($order)) {
                 $order->update_status( 'wc-preparing-to-ship' );
            }
        }
    }
}

我尝试添加“$Diff-〉invert;“变量,并使用else函数测试结果是否为1(这不是应该表示负数吗?),但它使我所有的订单都发生了变化,甚至包括那些日期超过60天的订单,因此我显然在那里做错了什么。

$resultPos = $Diff->invert;     
                elseif ($resultPos=1) {
        $order = new WC_Order($order_id);
        if (!empty($order)) {
             $order->update_status( 'wc-preparing-to-ship' );
        }
    }
2guxujil

2guxujil1#

这是最后更新的(工作的)代码。只需要在格式中应用%r来反映负数,并在invert函数中使用$Diff变量,以便为负数返回“1
'//====状态更改为'准备发货' add_action('新cron状态更新少于两天','wp订单状态更新',10,1);函数wp订单状态更新(){全局$wpdb;

$my_query = "SELECT * FROM wp_wc_order_stats where STATUS='wc-processing'";
$result2 = $wpdb->get_results($my_query);
foreach ($result2 as $results2) {
    $order_id = $results2->order_id;
    $thisacof7 = get_post_meta( $order_id, 'ship_by_date_dont_edit', true );
    $date1=$thisacof7; // date("Y-m-d h:i:s");
    $thisdate=date("Y-m-d h:i:s");
    $dateStart = new DateTime($date1);
    $datetoday = new DateTime($thisdate);
    $dteDiff = $datetoday->diff($dateStart);
    $Diff = $dteDiff->format("%r%a");
    $resultPos = $dteDiff->invert;
    $daysdiff = (int)$Diff;
    if($Diff->invert || $Diff < 2) {
    $order = new WC_Order($order_id);
        if (!empty($order)) {
             $order->update_status( 'wc-preparing-to-ship' );
        }
    }
}

}`

相关问题