問題就是通過一個時間處理
echo date('Ymd', strtotime('+1 month', strtotime('20150130')) );
按照朋友的想法,應該輸出的是20150227 ,而實際輸出的是20150302
也就是說1月的29,30,31號輸出都是3月份的天數,并不是想要得到的2月的天數。
按照我的理解是,當月+1個月的天數即是相加當月的天數,這個想法也得到驗證。
例:
echo date('Ymd', strtotime('+1 month', strtotime('20150331')) );
想得到20150430 結果得到的是20150501
所以按照這樣的寫法在統計的時候會出現錯誤。當然我沒看過他寫的程序,
也不明白為何是在月底加一個月。
我給他的解決方案是,每個月都重新開始計算。這樣就不會出錯
最后他給的終極解決法案是:
echo date('Ym', strtotime('first day of next month', strtotime('20150130')) );
證實跟我的想法是一樣的。
他這個死腦筋一定要證明是php不完善,還特地去找ruby的解決方案。
按照她的要求我貼出他找的ruby的代碼:
Date.new(2015,1,30) +
ruby的最后結果就是希望得到的2月27號
PHP時間差8小時的問題問題原因所在
從php5.1.0開始,php.ini里加入了date.timezone這個選項,默認情況下是關閉的
也就是顯示的時間(無論用什么php命令)都是格林威治標準時間
和我們的時間(北京時間)差了正好8個小時。
有以下3中方法可以恢復正常的時間。
1、最簡單的方法就是不要用php5.1以上的版本
2、如果一定要用,而且不能修改php.ini,則需要在關于時間的初始化的語句的
上面加上 date_default_timezone_set (‘XXX’);
3、一勞永逸,僅限能修改php.ini。打開php.ini查找date.timezone 去掉前面的分號
date.timezone = PRC,重啟http服務(如apache2或iis等)即可
【相關注解:】↓
關于XXX,大陸內地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次為重慶,上海,烏魯木齊)
港臺地區可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次為澳門,香港,臺北)
還有新加坡:Asia/Singapore
老外好像把北京漏調了
其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC
PRC是什么?PRC是中華人民共和國啊-_-
你可以到http://www.php.net/docs.php上查到更多的地區
由于程序最后還是會把地名轉為時區來計算,所以當你使用的不是內置的區域的時候,程序將自動使用格林威治標準時間。
請注意:
如果沒有修改php.ini的權限,那么應該在調用date()方法之前加上date_default_timezone_set(‘PRC’);
參數要加上雙引號或單引號。
新聞熱點
疑難解答