如何在 wordpress 页面中插入一个显示自特定订单发出以来的天数的小部件?

How to insert in a wordpress page a widget that shows days since a specific order was made?

我必须输出这些信息,但我不习惯使用PHP,不知道我做错了什么。

我这样查询 woocommerce 订单日期:

$order = wc_get_order(456);
$orderdate = $order->date_created;

这似乎工作正常,returns 日期格式如下:

2020-10-15T17:38:37-03:00

对于当前日期,我创建了一个这样的变量:

$date = date('d-m-y h:i:s');

但是当我尝试输出订单日期和当前日期之间的天数差异时,它总是给我 0

这是我尝试计算差异的方法:

function dateDiff($date1, $date2)
{
    $date1_ts = strtotime($date);
    $date2_ts = strtotime($orderdate);
    $diff = $date2_ts - $date1_ts;
    return round($diff / 86400);
}

$dateDiff = dateDiff($date1, $date2);

echo ("day difference is: " . $dateDiff  );

非常感谢您的阅读,希望您能帮助我。

关于您的代码错误的简短说明:

$dateDiff = dateDiff($date1, $date2);

在您的例子中,dateDiff 是一个需要两个参数 $date1$date2 的函数。但是您正在将不存在的变量传递给函数。它们不存在于函数范围之外,因为您没有声明它们。

然后你试图从父范围内的日期获取时间戳,并且可能从这两种情况中得到 NULL :)

$date1_ts = strtotime($date);
$date2_ts = strtotime($orderdate);

小改进:

在处理日期时最好使用 DateTime class。 DateTime class 有一个名为 format 的强大方法,它允许您以适合您的格式输出日期。

如果我们将您所做的合并到一段代码中并进行一些更改,那么我们将得到:

$order        = wc_get_order(456);
$order_date   = new DateTime($order->date_created);
$current_date = new DateTime();

function dateDiff($date1, $date2)
{
    // check if diff is not equal to zero in order to avoid division be zero exception
    if ($diff = abs(strtotime($date2) - strtotime($date1))) {
       return round($diff / 86400);
    }

    return 0;
}

echo ("day difference is: " . dateDiff(
    $current_date->format('d-m-Y h:i:s'), 
    $order_date->format('d-m-Y h:i:s')
) . " days");