如何在 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");
我必须输出这些信息,但我不习惯使用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");