[英]PHP - Calculate the difference between two dates
我想计算两个日期之间的年数。 其中一个是从数据库中检索的,而另一个是从日期格式的用户输入中检索的。
我使用以下代码从用户获取日期:
$today = $_POST['to-day'];
$tomonth = $_POST['to-month'];
$toyaer = $_POST['to-year'];
$dateto = date("$toyaer-$tomonth-$today");
这就是我如何使用从数据库中检索到的数据进行计算的方法,
$start = $leaveresult['date']; // i took from database
$end = strtotime($dateto);
$difference = abs($end - $start);
$years = floor($difference / (60*60*24*365));
问题是我得到的结果始终为0
。
我尝试了不同的方法,但所有方法的结果均为0
,其中之一的结果很大。
这未经测试,但我认为这样会起作用:
$today = $_POST['to-day'];
$tomonth = $_POST['to-month'];
$toyear = $_POST['to-year'];
$dateto = "$toyear-$tomonth-$today";
$start = $leaveresult['date'];// i took from database
$end = strtotime($dateto);
$difference = abs($end - $start);
$years = floor($difference / (60*60*24*365));
我假设$leaveresult['date']
是Unix时间戳
另外请注意,我固定了post变量名称。
如果开始日期不在Unix时间戳中,则使用
$start = strtotime($leaveresult['date']);// i took from database
DateTime类通过为您提供diff方法来简化所有这些操作。 这将返回一个DateInterval对象,您可以获取想要的值。
假设$_POST
看起来像这样:
$_POST = array(
'to-year' => 2010,
'to-month' => 8,
'to-day' => 22
);
$leaveresult['date']
看起来像这样:
$leaveresult = array(
'date' => date('Y-m-d H:i:s', strtotime('-5 years')));
你可以做这样的事情...
$input_date = new DateTime(sprintf("%d-%d-%d", $_POST['to-year'], $_POST['to-month'], $_POST['to-day']));
$database_date = new DateTime($leaveresult['date']);
$diff = $database_date->diff($input_date);
echo $diff->format('%r%y years') . PHP_EOL;
echo $diff->format('%r%m months') . PHP_EOL;
echo $diff->format('%r%d days') . PHP_EOL;
$years = $diff->y;
哪个会产生
3 years
1 months
5 days
$years
等于3
在这两种情况下都需要一个时间戳记-格式化的时间戳记(作为日期对象)和从数据库获取的时间戳记...因此,如果两种情况下都获得时间戳记,那么我认为您的方法没有错...但最后您尝试将数字四舍五入...当然,如果少于一年,结果将为0。 在不先四舍五入的情况下对其进行测试,并测试您的时间戳,也许那里也有问题吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.