我想计算两个日期之间的年数。其中一个是从数据库中检索的,另一个是从用户输入的日期格式中获取的。
我使用以下代码从用户那里获取日期:
$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,其中一种方法得到了大量的结果。
发布于 2012-07-17 03:01:41
这是未经测试的,但我认为这样的东西会起作用:
$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 发布于 2012-07-17 03:32:04
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
发布于 2012-07-17 03:25:40
在这两种情况下,您都需要一个时间戳-格式化的时间戳(作为date对象)和从数据库获得的时间戳……所以我认为你的方法没有错,如果你在两种情况下都得到了时间戳…但最后你还是试着用floor对数字进行取整...当然,如果不到一年,这将导致0。在不进行舍入的情况下测试它,并测试您的时间戳,也许那里也有问题?
https://stackoverflow.com/questions/11510668
复制相似问题