PHP日期计算不正确

时间:2011-09-16 08:02:21

标签: php

我有这个代码,它打印为'01 / 01/1970'

$dob = mktime(0, 0, 0, date("m"), date("d")-1, date("y")-18);
echo "DOB is ".date("d/m/y", $dob); 

为什么这一年不比今天少18年?

5 个答案:

答案 0 :(得分:5)

date("y") == 1111-18 == -7。您需要date("Y") == 2011

调试提示:打印出代码的不同部分,以便您了解正在发生的事情。 echo $dob显示问题出在第一行,而echo date("y")-18表示它是导致它的mktime()的最后一个参数。

答案 1 :(得分:3)

这是最简单的解决方案:

$dob = strtotime('-18 years');
echo date('d/m/y', $dob);

strtotime()是一个强大的功能。

答案 2 :(得分:2)

$dob = mktime(0, 0, 0, date("m"), date("d")-1, date("Y")-18);
echo "DOB is ".date("d/m/y", $dob); 

答案 3 :(得分:1)

根据manual,当您指定小y作为date函数的参数时,它将返回当前年份的两位数表示。由于当前年份是2011年,它将返回11.从中减去18将给出否定结果,这就是mktime重置为原始时间戳的原因。

date("y")更改为date("Y"),即将小y替换为大写Y,然后您将获得所需的结果。

答案 4 :(得分:0)

以下代码更容易理解:

<?php
$dob = new DateTime();
printf("\nToday is %s", date_format($dob, 'D, M d Y'));
$dob->modify('-1 day');
$dob->modify('-18 year');
printf("\nToday minus %d day and %d year is %s", 
         -1, -18, 
         date_format($dob, 'D, M d Y'));
?>
你不同意吗?使用PHP计算日期并不困难。只需查看各种格式的PHP日期函数,例如Weeknumbers。