ある日、1か月前の今日の日付を尋ねたときに問題が発生しました。 最初は strtotime(”-1 month”) 関数を使用して評価しましたが、月の長さが異なる月の計算結果が正しくないことがわかりました。 たとえば、2011-03-31 の場合、結果は 2011-03-03 になります。まず問題を調査するのではなく、解決方法を見てみましょう。 このとき、PHPにmktime関数があることを思い出したので、次のコードを書きました:
コードをコピー コードは次のとおりです:
echo date("Y-m-d H:i:s ", mktime(date("G ", $time), date("i", $time),
date("s", $time), date("n", $time) - 1, date(" j", $time), date ("Y", $time)));
実行すると、strtotimeの結果と同じであることが分かります。
やはりこの関数に基づいていますが、月は直接操作できないため、日から始めて前月を取得し、次に日付を使用してデータを結合します。次のコード:
コードをコピーします コードは次のとおりです:
$time = strtotime("2011-03-31");
/**
* 前月の今日の日付を計算します
* @param type $time
* @return type
*/
function last_month_today($ time) {
last_month_time = mktime(date("G", $time), date("i", $time),
date("s", $time), date("n", $time), - 1, date( "Y", $time));
return date(date("Y-m", $last_month_time) . "-d H:i:s", $time);
}
echo last_month_today($time) ;
しかし、現時点では 2011-02-31 という日付はありません。どうすればよいでしょうか。現在の要件は、そのような日付の月の最終日を表示することです。 次のコード:
コードをコピーします コードは次のとおりです:
$time = strtotime("2011-03-31");
/**
* 前月の今日の日を計算します。前月に今日がない場合は、前月の末日を返します。
* @param type $time
* @return type
*/
function last_month_today($ time){
$ last_month_time = mktime(date("G", $time), date("i", $time),
date("s", $time), date("n", $time), 0, date(" Y", $time));
$last_month_t = date("t", $last_month_time);
if ($last_month_t < date("j", $time)) {
return date(" Y-m-t H:i: s", $last_month_time);
}
return date(date("Y-m", $last_month_time) . "-d", $time);
}
echo last_month_today($time);
ここで注意すべき点が 1 つあります。このコードは date("Y-m", $last_month_time) です。コードを記述する過程で、 "Y-" . date("m", $last_month_time) "-d" と記述すると、年の期間に問題が発生します。 この記事を書いているときに発見しました。
この方法に加えて、最初に年、月、日を計算してから文字列を結合することもできます。これは純粋な文字列操作です。
http://www.bkjia.com/PHPjc/327118.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327118.html技術記事ある日、1か月前の今日の日付を尋ねたときに問題が発生しました。 最初はstrtotime(”-1 month”)関数を使って評価していましたが、月の長さが異なる月の計算結果に問題があることが分かりました…
。