You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress页面插入显示特定WooCommerce订单下单后天数的小部件

问题原因

你现有代码存在3个核心错误,是返回结果始终为0的直接原因:

  • 变量作用域错误:函数内部直接调用外部的$date、$orderdate变量,未使用传入的$date1、$date2参数。PHP默认规则下函数内部无法直接访问外部变量,所以两个时间戳取值都是空,strtotime返回false,差值计算结果自然为0
  • 参数传递错误:调用dateDiff函数时传入的$date1、$date2没有提前赋值,你实际定义的两个时间变量名为$date、$orderdate
  • 时间时区风险:当前时间用date函数生成默认取PHP配置的时区,而WooCommerce订单时间自带时区偏移,直接用strtotime转换容易出现时区差导致计算结果不准
修正代码

方案1:修复原有逻辑的写法

// 获取订单日期
$order = wc_get_order(456);
$orderdate = $order->date_created;
// 取当前时间(用c格式生成带时区的时间,和订单返回格式匹配避免时区误差)
$current_date = date('c');

function dateDiff($date1, $date2)
{
    $date1_ts = strtotime($date1);
    $date2_ts = strtotime($date2);
    $diff = abs($date2_ts - $date1_ts); // 加abs避免出现负数结果
    return round($diff / 86400);
}

$dateDiff = dateDiff($orderdate, $current_date);
echo "day difference is: " . $dateDiff;

方案2:WooCommerce专属最优写法

WooCommerce的date_created属性本身是WC_DateTime类的实例,不需要手动转时间戳,直接调用内置方法更稳妥,不会出现时区兼容问题:

$order = wc_get_order(456);
$order_timestamp = $order->get_date_created()->getTimestamp();
$current_timestamp = time();
$diff_days = round(abs($current_timestamp - $order_timestamp) / 86400);
echo "day difference is: " . $diff_days;

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:08