获取date_diff函数返回以天为单位的差值

时间:2016-06-16 作者:Jim Bim

我一直在尝试构建一个功能来计算产品销售所需的天数。我们代表客户销售独特的商品,因此,为了便于报告和产品管理,最好了解哪些商品实际销售以及需要多长时间。

自定义函数似乎正在获取$order_created_date$product_date 可以,并将其存储在order item meta中,但实际上计算天数差异是行不通的。

这就是我迄今为止所取得的成就:

function mysite_woocommerce_order_completed( $order_id ) {
    //get order created date and order items
    $order = NULL;
    $order_created_date = NULL;
    $order = wc_get_order($order_id);
    $order_created_date = $order->order_date;
    $order_items = $order->get_items();
    foreach ($order_items as $item_id => $order_item) {
        // addin _order_date meta not needed in finished version
        $product_id = $order_item[\'product_id\'];
        wc_add_order_item_meta( $item_id, \'_order_added_date\', $order_created_date );
        // adding _product_published_date meta not needed in finished version
        $product_date = get_the_time( \'Y-m-d H:i:s\', $product_id ); 
        wc_add_order_item_meta( $item_id, \'_product_published\', $product_date );
        // calculate date difference, not working. Needs a check to not add the meta if already added because makes duplicate entries
        $diff = date_diff( $product_date, $order_created_date );
        wc_add_order_item_meta( $item_id, \'_days_to_purchase\', $diff );
    }
}

add_action( \'woocommerce_order_status_completed\', \'mysite_woocommerce_order_completed\', 1, 1 );
如果您有任何帮助来解决问题并提出优化代码的建议,我们将不胜感激。干杯

1 个回复
SO网友:Jim Bim

呜呜,我真的成功了。必须使用new DateTime() 使用变量和$diff->days 显示日期。现在,为了防止功能在少数情况下复制元信息,一些商店经理在完成状态和其他状态之间不小心来回更改状态。想法?

function mysite_woocommerce_order_completed( $order_id ) {
    $order = NULL;
    $order_created_date = NULL;
    $order = wc_get_order($order_id);
    $order_created_date = $order->order_date;
    $order_created_date = new DateTime($order_created_date);
    $order_items = $order->get_items();
    foreach ($order_items as $item_id => $order_item) {
        $product_id = $order_item[\'product_id\'];
        $product_date = get_the_time( \'Y-m-d H:i:s\', $product_id );
        $product_date = new DateTime($product_date);
        $diff = date_diff( $product_date, $order_created_date );
        // +1 to days to start counting same day sales from 1 day
        wc_add_order_item_meta( $item_id, \'_days_to_purchase\', 1 + $diff->days );
    }
}
add_action( \'woocommerce_order_status_completed\', \'mysite_woocommerce_order_completed\', 10, 1 )