如何在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
相关产品推荐
相关产品推荐

