之前在開發專案時,遇到過用strtotime("- 1 month")會出現bug的情況,主要原因是PHP預設設定的時間是以格林威治時區為標準的,有兩種方法解決這個問題,一是在php.ini修改預設的時區,二是在程式中設定
首先說下第一種方法吧,在php.ini中修改預設的時區
我用的wamp整合環境,之前一直以為是在bin/php/php5.5.12進行修改預設時區,但無論怎麼修改都還是顯示的格林威治時區的時間,並且網上沒有查找到對應的解決辦法,後來在bin/apache/apache2.4.9 /bin中查找到了一個php.ini文件,設定該文件的時區為date.timezone = PRC,則在頁面上顯示是和我係統時間是一樣的。
設定的方法是在php.ini檔案中對修改時區為我們地區的時間,如修改date.timezone = PRC則表示將時間設定為中華人民共和國時間,也就是當前我們系統的時間,注意:為了使我們設定的時區生效,需要去掉前面的;。
第二種方法是在程式中加入date_default_timezone_set('PRC');
如
date_default_timezone_set('PRC');//此句用於消除時間差H:i:s");
echo date('Y-m', strtotime('midnight first day of -1 month'));
或:
echo date('Y-m', strtotime(date('Y-m-01')) – 86400);
date('Y年m月',strtotime('- 2 month',$ t)),
));
?>
這樣做的原理是將每個月時間的年和月分離出來,然後在後面添加上日和時分秒,這樣在做strtotime('- 1 month' ,$t)操作時,就可以顯示上個月的時間了。
另外在提一個注意事項:
在用strtotime(date("Y-m-d h:i:s"))做時間處理時,這裡的字母是區分大小寫的,
h是區分大小寫的,小寫h輸出的是時區的小時,17點就是5點。而大寫H是輸出17的,
而且年份y的大小寫是有區別的,小寫y輸出的是13。大寫Y輸出的是2013。