2011-09-16 15 views
1

私はこのコードを持っている、そしてそれは'01/01/1970年PHPの日付が正しく

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

として出力し、なぜ今年は今日以上で18歳で計算していませんか?

+0

http://writecodeonline.com/php/で試してください(15/09/03を与えます) "Y"を使用した場合と同じように、奇妙なアイデアとコードパッドは01/01/70です。 –

+0

@Ray Toal :またはhttp://codepad.org/ –

+0

@Sayemコメントを編集しました。私は何か理由でwritecodeonlineを指摘していましたが、yをYと扱っています。なぜか分からないのです! –

答えて

2

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

date("y") == 1111-18 == -7してみてください。 date("Y") == 2011が必要です。

デバッグのヒント:コードの別々の部分を印刷して、何が起こっているかを確認してください。 echo $dobは、問題が最初の行にあることを示し、echo date("y")-18は、その原因となるのはmktime()の最後の引数であることを示しています。

3

これが最も簡単な解決策です:

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

strtotime()は強力な機能です。

1

によれば、dateの引数に小文字のyを指定すると、現在の年の2桁の表現が返されます。今年は2011年なので、11を返します。それから18を引いた場合、負の結果になるので、mktimeは元のタイムスタンプにリセットされます。

date("y")からdate("Y")に変更します。つまり、小文字のyを大文字のYに置き換えると、目的の結果が得られます。

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で日付を計算することはあまり難しくありません。 Weeknumberのような様々なフォーマットのPHP Date関数も見てください。

関連する問題