2016-03-31 14 views
6

kwietnia mrówka maja zwraca samą datę w PHP:DateTime ('Pierwszy dzień kwietnia') zwraca samo jako DateTime ('pierwszy dzień maja')

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'

Działa doskonale na pozostałe miesiące, but for April it returns 05 instead of 04.

Edit: 'strefa czasowa' => 'Europa/Paryż'

Edit2: http://imgur.com/TccRcMo

+0

to sprawdzić w Indian Standardowy czas? – SunUser

+5

To dziwne: https://3v4l.org/GteBt - w PHP 5.5.24 - 5.5.33, 5.6.8 - 7.0.5 działa, ale inne wersje mają złą datę. –

+0

możesz zrobić to samo i pokazać: http://imgur.com/dI5IvMH –

Odpowiedz

3

Jest to bardzo dziwne zachowanie, ale znalazłem kilka rozwiązań, aby uzyskać oczekiwane rezultaty. Powodem, dla którego to nie działa, jest brakujący rok na obiekcie DateTime.

rozwiązanie # 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')); 
?> 

rozwiązanie # 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'))); 
?> 

rozwiązanie # 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 do @Glavic

+0

Zamiast tego użyj po prostu "1 kwietnia". –

0

Jeśli używasz tego w Indian standardowego czasu niż to wykorzystać:

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 (nowy DateTime ("pierwszy dzień kwietnia", nowy DateTimeZone ("Azja/Kalkuta"))); nadal zwraca 05 – Edgar

+0

Ustawiłeś date_default_timezone_set ("Asia/Kolkata") – SunUser

+0

tak, wciąż zwraca to samo. – Edgar