2012-04-20 40 views
8

在包含strtotime('上個月的第一天')的版本差異?

date('Y-m-d', strtotime('first day of last month')) 
版本5.3.10

(本地主機)我得到的,例如, '2012-03-01' 的腳本。

in version 5.2.17(remote host)我得到'1969-12-31'。

是否有一個表達式會返回兩個版本的預期結果(例如'2012-03-01')?

回答

8

您應該使用mktime()功能:

<?php 
echo date('Y-m-d', mktime(0,0,0,date('n')-1,1,date('Y'))); //2012-03-01 
?> 

See In Action

+0

...或'strtotime(' - '。(date('j') - 1)。'days -1 month')' – DaveRandom 2012-04-20 16:57:02

+0

您應該發表答案; P,我傾向於遠離時間可以使用自PHP 3以來的功能進行幾乎任何日期/時間操作;) – 2012-04-20 16:59:46

+0

非常感謝。我還需要最後一天,現在是'date('Ym-d',mktime(0,0,0,date('n'),0,date('Y')))' – geoB 2012-04-20 17:00:09

1

這是一個從PHP 5.2.17一個known bug

+0

沒有解決方法? – geoB 2012-04-20 16:46:48

+0

@geoB解決方法是更新 – 2012-04-20 16:48:00

+0

是的PHP 5.2.x是* waaay *過時,請考慮更新您的PHP版本。 (@DaveRandom我編輯了幾秒鐘後) – 2012-04-20 16:48:36

0
date('Y-m-d', strtotime('first day of -1 month') 

正常工作的PHP 7.0