我想找到两个日期之间的差异,我使用了date_diff
。当格式函数应用于date_diff
对象时,它会返回错误。
从数据库中提取在布尔
上调用成员函数format()
$field_value
,其格式为 dd/mm/YYYY
。当我对 $field_value
和 $indexing_value
的值进行硬编码时,以下代码可以正常运行。
一直运行正常,直到第8行。我已经尝试输出
的值$diff->format("%R%a")
并返回精确值,但代码在if语句附近出错。
$date = new DateTime();
$current_date = $date->format('d/m/Y');
$indexing_value = str_replace("/", "-", $field_value);
$current_value = str_replace("/", "-", $current_date);
$indexing_value = date_create($indexing_value);
$current_value = date_create($current_value);
$diff = date_diff($indexing_value, $current_value);
if ($diff->format("%R%a") < 0) {
echo "1";
} else {
echo "2";
}
请告诉我上述代码有什么问题。
答案 0 :(得分:1)
添加条件以检查是否有diff,因为如果有错误则返回false。检查manual是否有相同的
$diff = date_diff($indexing_value, $current_value);
if ($diff) {
if ($diff->format("%R%a") < 0) {
echo "1";
}else{
echo "2";
}
}
您收到错误是因为某些值未计算差异且False
$diff
答案 1 :(得分:0)
请告诉我上述代码有什么问题。
代码有几个问题:
您不检查date_create()
返回的值;它返回FALSE
on error。
格式化$date
然后从结果字符串中创建$current_value
有什么意义?如果您不关心时间组件并且只需要使用DateTime
对象的日期部分,则可以使用其setTime()
方法将时间组件设置为0
。
当您知道日期时,使用str_replace()
来操纵日期的文本表示是什么意思? DateTime::createFromFormat()
可用于将字符串解析为DateTime
对象。
无需计算两个日期的差异及其格式,并将该值与0
进行比较。可以直接比较DateTime
个对象。
总而言之,您需要的所有代码都是:
// Current date & time
$today = new DateTime();
// Ignore the time (change $today to "today at midnight")
$today->setTime(0, 0, 0);
// Parse the value retrieved from the database
$field = DateTime::createFromFormat('d/m/Y', $field_value);
// We don't care about the time components of $field either (because the time
// is not provided in the input string it is created using the current time)
$field->setTime(0, 0, 0);
// Directly compare the DateTime objects to see which date is before the other
if ($field < $today) {
echo "1";
} else {
echo "2";
}