PHP - 2 个日期之间的天数差异
PHP - Difference Between 2 Dates in Days
我有以下内容:
$dateStart = get_post_meta( get_the_ID(), 'startdate' , true);
$dateStart = DateTime::createFromFormat('d/m/Y h:i:s', $dateStart);
$dStart = $dateStart->format('d/m/y');true);
$dEnd = date("d/m/y");
echo $dStart .'-'.$dEnd;
这输出 12/06/15-28/10/15
但对于我来说,我无法弄清楚如何获得两个日期之间的天数差异。
有什么建议吗?我尝试了一些方法,但每次都出错。
谢谢
使用 DateTime::diff - http://php.net/manual/en/datetime.diff.php
$dateStart = DateTime::createFromFormat('d/m/Y h:i:s', $dateStart);
$dateEnd = new DateTime();
$difference = $dateStart->diff($dateEnd);
另请注意,现在假设不将结尾传递给 diff()。因此,在您的特定示例中,这也适用:
$dateStart = DateTime::createFromFormat('d/m/Y h:i:s', $dateStart);
$difference = $dateStart->diff();
使用这个(工作示例)
date_default_timezone_set("Asia/Colombo");
$dateStart = get_post_meta( get_the_ID(), 'startdate' , true);
$datetime1 = new DateTime(date('Y-m-d', $dateStart));
$datetime2 = new DateTime(date('Y-m-d', $dateStart)));
$interval = $datetime1->diff($datetime2);
$date_diff = $interval->format('%R%a days');
echo "Difference is ".$date_diff
$daysBefore = round(abs(strtotime(Date("l, d F Y"))-strtotime($dateStart))/86400);
$daysAfter = round(abs(strtotime(Date("l, d F Y"))-strtotime($dateEnd))/86400);
这似乎是我让它工作的唯一方法
我发现计算 DateTime $a
日期和 DateTime $b
日期之间的天数的最安全方法是依赖它们在午夜的时间戳:
protected static function diffDays(DateTime $a, DateTime $b)
{
return round(
($a->setTime(0, 0, 0)->getTimestamp() - $b->setTime(0, 0, 0)->getTimestamp())
/ 86400 // 60 * 60 * 24 = 86400s in 24h
);
}
对我来说效果很好:)
注意:我使用硬编码值86400
以减少无用的处理时间计算60 * 60 * 24
我有以下内容:
$dateStart = get_post_meta( get_the_ID(), 'startdate' , true);
$dateStart = DateTime::createFromFormat('d/m/Y h:i:s', $dateStart);
$dStart = $dateStart->format('d/m/y');true);
$dEnd = date("d/m/y");
echo $dStart .'-'.$dEnd;
这输出 12/06/15-28/10/15
但对于我来说,我无法弄清楚如何获得两个日期之间的天数差异。
有什么建议吗?我尝试了一些方法,但每次都出错。
谢谢
使用 DateTime::diff - http://php.net/manual/en/datetime.diff.php
$dateStart = DateTime::createFromFormat('d/m/Y h:i:s', $dateStart);
$dateEnd = new DateTime();
$difference = $dateStart->diff($dateEnd);
另请注意,现在假设不将结尾传递给 diff()。因此,在您的特定示例中,这也适用:
$dateStart = DateTime::createFromFormat('d/m/Y h:i:s', $dateStart);
$difference = $dateStart->diff();
使用这个(工作示例)
date_default_timezone_set("Asia/Colombo");
$dateStart = get_post_meta( get_the_ID(), 'startdate' , true);
$datetime1 = new DateTime(date('Y-m-d', $dateStart));
$datetime2 = new DateTime(date('Y-m-d', $dateStart)));
$interval = $datetime1->diff($datetime2);
$date_diff = $interval->format('%R%a days');
echo "Difference is ".$date_diff
$daysBefore = round(abs(strtotime(Date("l, d F Y"))-strtotime($dateStart))/86400);
$daysAfter = round(abs(strtotime(Date("l, d F Y"))-strtotime($dateEnd))/86400);
这似乎是我让它工作的唯一方法
我发现计算 DateTime $a
日期和 DateTime $b
日期之间的天数的最安全方法是依赖它们在午夜的时间戳:
protected static function diffDays(DateTime $a, DateTime $b)
{
return round(
($a->setTime(0, 0, 0)->getTimestamp() - $b->setTime(0, 0, 0)->getTimestamp())
/ 86400 // 60 * 60 * 24 = 86400s in 24h
);
}
对我来说效果很好:)
注意:我使用硬编码值86400
以减少无用的处理时间计算60 * 60 * 24