下面是我尝试以此格式获得当年3月31日学生年龄的代码 - > 6年,3个月,14天。但是我在Days中有所不同。我查看了此网站http://www.calculator.net/age-calculator.html
的年龄示例1. 19-12-2007应显示6年3个月12天
我的代码显示在哪里 - 6年,3个月,13天
示例2. 29-06-2009应显示4年9个月2天
我的代码显示在哪里 - 4年,9个月,6天
示例3. 29-02-2008应显示6年1个月2天
我的代码显示在哪里 - 6年,1个月,1天
这是代码 -
<?php
function dt_wrd($date)
{
$date1 = $date;
$date2 = "31-03-".date('Y');
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
$ys="s";
$ms="s";
$ds="s";
if($months=="1" ||$months=="0" )
{
$ms="";
}
if($years=="1" ||$years=="0" )
{
$ys="";
}
if($days=="1" ||$days=="0" )
{
$ds="";
}
echo "$years Year$ys , $months Month$ms , $days Day$ds";
}
$date1='29-06-2009';//$_GET['dob'];
dt_wrd($date1);
?>
答案 0 :(得分:1)
http://www.php.net/manual/en/datetime.diff.php
看一下第一个例子。它只用几行代码就可以显示你想要做的事情。
编辑:您可以更改format命令以打印出所需的格式。您可能需要回复3次(多年一次,一次持续数月,持续数天)。
答案 1 :(得分:1)
您假设所有月份都是30天;这不是你如何计算月和日的差异。
更明智的做法是取一天的数字并减去它。如果一个小于另一个,则需要考虑上个月的天数。
这样的事情:
<?php
function lastMonth($a)
{
$d1 = strtotime(implode("-", $a));
$a[1] = $a[1] - 1;
$d2 = strtotime(implode("-", $a));
$days = ($d1 - $d2) / (60 * 60 * 24);
return $days;
}
function dt_wrd($date1, $date2)
{
date_default_timezone_set('US/Eastern');
$s1 = strtotime($date1);
$s2 = strtotime($date2);
if($s1 > $s2) {
$temp = $s1;
$s1 = $s2;
$s2 = $temp;
}
$fmtDate1 = date("d-m-y", $s1);
$fmtDate2 = date("d-m-y", $s2);
$fmtArr1 = explode( "-", $fmtDate1);
$fmtArr2 = explode( "-", $fmtDate2);
$days = $fmtArr2[0] - $fmtArr1[0];
$months = 0;
if($days < 0) {
$months = $months - 1;
$days = $days + lastMonth($fmtArr1);
}
$months = $fmtArr2[1] - $fmtArr1[1] + $months;
$years = $fmtArr2[2] - $fmtArr1[2];
if($months < 0) {
$months = $months + 12;
$years = $years - 1;
}
$ys="s";
$ms="s";
$ds="s";
if($months=="1" ||$months=="0" )
{
$ms="";
}
if($years=="1" ||$years=="0" )
{
$ys="";
}
if($days=="1" ||$days=="0" )
{
$ds="";
}
echo "$years Year$ys , $months Month$ms , $days Day$ds\n";
}
$today='31-03-2014';
$date1='19-12-2007';
$date2='29-06-2009';
$date3='29-02-2008';
dt_wrd($date1,$today);
dt_wrd($date2,$today);
dt_wrd($date3,$today);
?>
输出:
6 Years , 3 Months , 12 Days
4 Years , 9 Months , 2 Days
6 Years , 1 Month , 2 Days
正如所料。
我测试了一些边缘情况(比如 - 如果你在1月份会发生什么,并且必须查看12月份的天数。你会要求“0月”。事实证明这样做很好 - 第0个月有12天的预期31天。)