如何获取从给定开始日期创建的 WooCommerce 订单?

问题描述 投票:0回答:2

仅当订单是从给定日期创建的(假设:2024 年 1 月 11 日)时,我才需要获取订单。 然后我会得到从 2024 年 1 月 11 日到实际日期(今天)创建的订单。

我发现这段代码仅在过去 24 小时内执行类似的获取订单的操作。我想我需要将日期转换为时间戳,例如:

$myDate = '2024/11/01';
$timestamp = strtotime($myDate);

但是我不知道如何集成/修改:

$order = wc_get_order( $customer_order );          
        
$date_created_dt = $order->get_date_completed();            
        
$timezone        = $date_created_dt->getTimezone(); // Get the timezone
$date_created_ts = $date_created_dt->getTimestamp(); // Get the timestamp in seconds

$now_dt = new WC_DateTime(); // Get current WC_DateTime object instance
$now_dt->setTimezone( $timezone ); // Set the same time zone
$now_ts = $now_dt->getTimestamp(); // Get the current timestamp in seconds

$twenty_four_hours = 24 * 60 * 60; // 24hours in seconds

$diff_in_seconds = $now_ts - $date_created_ts; // Get the difference (in seconds)

// Output
if ( $diff_in_seconds < $twenty_four_hours ) {
    echo '<p>Order created LESS than 24 hours ago</p>';
} 
        
        
php datetime woocommerce timezone orders
2个回答
0
投票

要检索从特定日期(例如 01/11/2024)至今创建的订单,您可以修改代码以将订单日期与设置的开始日期(而不仅仅是过去 24 小时)进行比较。

$customer_order_id = 123; // Replace with the actual order ID
$order = wc_get_order($customer_order_id);

if ($order) {
    // Define the start date
    $start_date = '2024-11-01'; // Start date in 'YYYY-MM-DD' format
    $start_dt = new WC_DateTime($start_date); // Convert start date to WC_DateTime object
    $start_ts = $start_dt->getTimestamp(); // Get timestamp of start date

    // Get order creation date and convert to timestamp
    $date_created_dt = $order->get_date_created();
    $order_created_ts = $date_created_dt->getTimestamp(); 

    // Compare timestamps
    if ($order_created_ts >= $start_ts) {
        echo '<p>Order created on or after ' . $start_date . '</p>';
    } else {
        echo '<p>Order was created before ' . $start_date . '</p>';
    }
}

0
投票

首先,您可以使用 WordPress 来简化时区问题

wp_timezone()

要获取从给定日期开始的所有订单,您可以使用与 高性能订单存储 (HPOS) 兼容的查询,使用带有

wc_get_orders()
参数的
date_created
函数,如下所示:

$start_date = '2024/11/01';

$date_obj   = new WC_DateTime($start_date); // Get the WC_DateTime object 
$date_obj->setTimezone( wp_timezone() ); // Set WordPress timezone

// Query all orders starting from the defined date
$orders = wc_get_orders( array(
    'limit'         => -1,
    'date_created'  => '>=' . $start_date->date( 'Y-m-d H:i:s' ) ), 
) );

使用 WC_Order_Query 您还可以定义:

  • 使用
    'status'
    参数查询订单状态,
  • 使用
    'customer'
    参数定位的用户 ID。
© www.soinside.com 2019 - 2024. All rights reserved.