我想计算两个日期之间的年数。其中一个从数据库中检索,而另一个从日期格式的用户输入中获取。
我使用此代码从用户那里获取日期:
$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
,其中一个产生了大量的数据。
答案 0 :(得分:3)
这是未经测试的,但我认为这样的事情会起作用:
$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时间戳
另请注意,我修改了帖子变量名称。
如果开始日期不在unix时间戳中,则使用
$start = strtotime($leaveresult['date']);// i took from database
答案 1 :(得分:2)
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
答案 2 :(得分:1)
在这两种情况下你都需要一个时间戳 - 你格式化的那个(作为日期对象)和你从数据库中获得的时间戳...... 所以我认为你的方法并没有错,如果你在两种情况下得到时间戳......但最后你试图用地板来计算数字...当然这会导致0,如果它小于一年。 首先测试它而不进行舍入,并测试你的时间戳,也许那里有问题吗?