我有这个代码,它打印为'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年?
答案 0 :(得分:5)
date("y") == 11
和11-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。