2016-03-31 119 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

相关问题