私はこのコードを持っている、そしてそれは'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歳で計算していませんか?
私はこのコードを持っている、そしてそれは'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歳で計算していませんか?
は
$dob = mktime(0, 0, 0, date("m"), date("d")-1, date("Y")-18);
echo "DOB is ".date("d/m/y", $dob);
date("y") == 11
と11-18 == -7
してみてください。 date("Y") == 2011
が必要です。
デバッグのヒント:コードの別々の部分を印刷して、何が起こっているかを確認してください。 echo $dob
は、問題が最初の行にあることを示し、echo date("y")-18
は、その原因となるのはmktime()
の最後の引数であることを示しています。
これが最も簡単な解決策です:
$dob = strtotime('-18 years');
echo date('d/m/y', $dob);
strtotime()
は強力な機能です。
によれば、date
の引数に小文字のy
を指定すると、現在の年の2桁の表現が返されます。今年は2011年なので、11を返します。それから18を引いた場合、負の結果になるので、mktime
は元のタイムスタンプにリセットされます。
date("y")
からdate("Y")
に変更します。つまり、小文字のy
を大文字のY
に置き換えると、目的の結果が得られます。
次のコードは、私見読みする方がはるかに簡単です:
<?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関数も見てください。
http://writecodeonline.com/php/で試してください(15/09/03を与えます) "Y"を使用した場合と同じように、奇妙なアイデアとコードパッドは01/01/70です。 –
@Ray Toal :またはhttp://codepad.org/ –
@Sayemコメントを編集しました。私は何か理由でwritecodeonlineを指摘していましたが、yをYと扱っています。なぜか分からないのです! –