一日遇到一個問題求上一個月的今天 最開始我們使用 strtotime(” month”) 函數求值發現有一個問題月長度不一樣的月份的計算結果有誤 比如得到的結果是我們先不追究什麼問題先看如何解決問題 此時想起PHP中有一個mktime函數於是自己寫了如下代碼
代碼如下:
echo date("Ymd H:i:s" mktime(date("G" $time) date("i" $time)
date("s" $time) date("n" $time) date("j" $time) date("Y" $time)));
當執行時發現結果和strtotime的結果是一樣的
還是基於這個函數既然無法直接操作月那麼我們從天入手得到上一個月然後再使用date拼接數據如下代碼
復制代碼 代碼如下:
$time = strtotime("");
/**
* 計算上一個月的今天
* @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) date("Y" $time));
return date(date("Ym" $last_month_time) "d H:i:s" $time);
}
echo last_month_today($time);
但是此時又有了另一個問題不存在這樣的日期怎麼辦?現在的需求是對於這樣的日期顯示當月最後一天 如下代碼
代碼如下:
$time = strtotime("");
/**
* 計算上一個月的今天如果上個月沒有今天則返回上一個月的最後一天
* @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) date("Y" $time));
$last_month_t = date("t" $last_month_time);
if ($last_month_t < date("j" $time)) {
return date("Ymt H:i:s" $last_month_time);
}
return date(date("Ym" $last_month_time) "d" $time);
}
echo last_month_today($time);
這裡需要注意一點 date(”Ym” $last_month_time) “d”這段代碼在寫代碼的過程中如果寫成了 “Y” date(”m” $last_month_time) “d” 則在跨年的時間上有問題 這點還是在寫這篇文章時發現的
除了這種方法還可以先算出年月日再拼接字符串這裡就是純粹的字符串操作了
From:http://tw.wingwit.com/Article/program/PHP/201311/20936.html