首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -计算两个日期之间的差值

问PHP -计算两个日期之间的差值
EN

Stack Overflow用户
提问于 2012-07-17 02:51:59
回答 3查看 1.9K关注 0票数 1

我想计算两个日期之间的年数。其中一个是从数据库中检索的,另一个是从用户输入的日期格式中获取的。

我使用以下代码从用户那里获取日期:

代码语言:javascript
复制
$today   = $_POST['to-day'];
$tomonth = $_POST['to-month'];
$toyaer  = $_POST['to-year'];
$dateto  = date("$toyaer-$tomonth-$today");

这是我是如何用从数据库中检索到的数据来计算的,

代码语言:javascript
复制
$start      = $leaveresult['date']; // i took from database 
$end        = strtotime($dateto);   
$difference = abs($end - $start);
$years      = floor($difference / (60*60*24*365));

问题是我得到的结果总是0。

我尝试了不同的方法,但所有的方法都得到了0,其中一种方法得到了大量的结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 03:01:41

这是未经测试的,但我认为这样的东西会起作用:

代码语言:javascript
复制
$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时间戳中,则使用

代码语言:javascript
复制
$start = strtotime($leaveresult['date']);// i took from database 
票数 3
EN

Stack Overflow用户

发布于 2012-07-17 03:32:04

DateTime类通过提供一个diff方法简化了这一切。这将返回一个DateInterval对象,您可以从中获取所需的值。

假设$_POST是这样的:

代码语言:javascript
复制
$_POST = array(
    'to-year' => 2010,
    'to-month' => 8,
    'to-day' => 22
);

$leaveresult['date']看起来像这样:

代码语言:javascript
复制
$leaveresult = array(
    'date' => date('Y-m-d H:i:s', strtotime('-5 years')));

你可以这样做..。

代码语言:javascript
复制
$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;

这将会产生

代码语言:javascript
复制
3 years
1 months
5 days  

$years将等同于3

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 03:25:40

在这两种情况下,您都需要一个时间戳-格式化的时间戳(作为date对象)和从数据库获得的时间戳……所以我认为你的方法没有错,如果你在两种情况下都得到了时间戳…但最后你还是试着用floor对数字进行取整...当然,如果不到一年,这将导致0。在不进行舍入的情况下测试它,并测试您的时间戳,也许那里也有问题?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11510668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档