以前在開發項目時,遇到過用strtotime("- 1 month")會出現bug的狀況,主要緣由是PHP默認設置的時間是以格林威治時區爲標準的,有兩種方法解決這個問題,一是在php.ini中修改默認的時區,二是在程序中設置php
首先說下第一種方法吧,在php.ini中修改默認的時區web
我用的wamp集成環境,以前一直覺得是在bin/php/php5.5.12中進行修改默認時區,但不管怎麼修改都仍是顯示的格林威治時區的時間,而且網上沒有查找到對應的解決辦法,後來在bin/apache/apache2.4.9/bin中查找到了一個php.ini文件,設置該文件的時區爲date.timezone = PRC,則在頁面上顯示是和我係統時間是同樣的。apache
設置的方法是在php.ini文件中對修改時區爲咱們地區的時間,如修改date.timezone = PRC則表示將時間設置爲中華人民共和國時間,也就是當前咱們系統的時間,注意:爲了使咱們設置的時區生效,須要去掉前面的;。code
第二種方法是在程序中加入date_default_timezone_set('PRC');orm
如開發
<?php
date_default_timezone_set('PRC');//此句用於消除時間差
$date = date("Y-m-d H:i:s");it
echo $date; //輸出class
?>原理
這樣就能夠在輸出咱們的當前時間了。date
如今出現了另外一個問題,在時間爲2016-03-31時,在用上面的方法獲取上一個月的時間時,獲取到的時間仍是2016-03,初步設想是由於這個方法是先查找上個月的天數,而後在使用今天的時間減去上個月天數。
如下有幾種方法,能夠幫助咱們達到預期效果,好比我要返回上個月的月份:
echo date(‘Y-m’, strtotime(‘midnight first day of -1 month’));
或者:
echo date(‘Y-m’, strtotime(date(‘Y-m-01’)) – 86400);
或者在程序中作以下處理
<?php
date_default_timezone_set(‘Asia/Shanghai’);
$first_day_of_month = date(‘Y-m’,time()) . ‘-01 00:00:01’;
$t = strtotime($first_day_of_month);
print_r(array(
date(‘Y年m月’,$t),
date(‘Y年m月’,strtotime(‘- 1 month’,$t)),
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。