2016-03-31 161 views
6

四月螞蟻五月在PHP返回同一日期:日期時間( '四月的第一天')返回相同的日期時間( '五月的第一天')

var_dump(new DateTime('first day of April')); - '2016-05-01 00:00:00'

var_dump(new DateTime('first day of May')); - '2016-05-01 00:00:00'

適用於其他月份,but for April it returns 05 instead of 04

編輯: '時區'=> '歐洲/巴黎'

EDIT2:http://imgur.com/TccRcMo

+0

您選中此項,因爲印度標準時間? – SunUser

+5

這很奇怪:https://3v4l.org/GteBt - 在PHP 5.5.24 - 5.5.33,5.6.8 - 7.0.5它正在工作,但其他版本得到錯誤的日期。 –

+0

你可以做同樣的,並告訴我:http://imgur.com/dI5IvMH –

回答

3

這是一個非常奇怪的行爲,但我找到了一些解決方案來獲得預期的結果。之所以這麼做是因爲DateTime對象上缺少一年。

溶液#1(https://3v4l.org/hIA89

<?php 
    $datetime = new DateTime('2016-01-01', new DateTimeZone('Europe/Paris')); 
    var_dump($datetime->modify('first day of april')); 
    var_dump($datetime->modify('first day of may')); 
?> 

溶液#2(https://3v4l.org/PDXM3

<?php 
    var_dump(new DateTime('first day of april 2016', new DateTimeZone('Europe/Paris'))); 
    var_dump(new DateTime('first day of may 2016', new DateTimeZone('Europe/Paris'))); 
?> 

溶液#3(https://3v4l.org/pBH0n

<?php 
    var_dump(new DateTime('1 april', new DateTimeZone('Europe/Paris'))); 
    var_dump(new DateTime('1st april', new DateTimeZone('Europe/Paris'))); 
    var_dump(new DateTime('1 may', new DateTimeZone('Europe/Paris'))); 
    var_dump(new DateTime('1st may', new DateTimeZone('Europe/Paris'))); 
?> 

THX到@Glavic

+0

或者只是使用'1月4日'而不是。 –

0

如果您正在使用這個在印度標準時間比使用:

public function indiantime() { 
    $set_date_time = date_default_timezone_set("Asia/Kolkata"); 
    $get_time_zone = date_default_timezone_get(); 
    $actualdatetime = new \DateTime(); 
    return $actualdatetime; 
} 
+0

var_dump(新的DateTime('四月的第一天',新的DateTimeZone('Asia/Kolkata')));仍然返回05 – Edgar

+0

您是否設置了date_default_timezone_set(「Asia/Kolkata」) – SunUser

+0

yup,仍然返回相同。 – Edgar

相關問題