2016-09-05 3 views
13

के लिए अलग-अलग परिणाम देता है मुझे PHP डेटडिफ़ के साथ समस्या है, मुझे नहीं पता कि प्रत्येक टाइमज़ोन अलग-अलग परिणाम क्यों देता है, उदाहरण के लिए प्राग रिटर्न 0 महीने, और यूएस 1 महीने लौटाता है।डेटडिफ प्रत्येक टाइमज़ोन

यह अंतर क्या है और मैं 1 महीने (बजाय 30 दिन, जब मैं 1 महीने जोड़ता हूं) वापस लौटाता हूं?

कोड यूरोप/प्राग:

date_default_timezone_set("Europe/Prague"); 
$from = new \DateTimeImmutable('2016-09-01'); 
$to = $from->add(new \DateInterval('P1M')); 
var_dump($from); 
var_dump($to); 
var_dump($from->diff($to)->m); 
var_dump($from->diff($to)->d); 

परिणाम यूरोप/प्राग:

object(DateTimeImmutable)#1 (3) { 
    ["date"]=> 
    string(26) "2016-09-01 00:00:00.000000" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(13) "Europe/Prague" 
} 
object(DateTimeImmutable)#3 (3) { 
    ["date"]=> 
    string(26) "2016-10-01 00:00:00.000000" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(13) "Europe/Prague" 
} 
int(0) 
int(30) 

-

कोड यूएस/प्रशांत:

date_default_timezone_set("US/Pacific"); 
$from = new \DateTimeImmutable('2016-09-01'); 
$to = $from->add(new \DateInterval('P1M')); 
var_dump($from); 
var_dump($to); 
var_dump($from->diff($to)->m); 
var_dump($from->diff($to)->d); 

अमेरिका परिणाम/प्रशांत :

object(DateTimeImmutable)#2 (3) { 
    ["date"]=> 
    string(26) "2016-09-01 00:00:00.000000" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(10) "US/Pacific" 
} 
object(DateTimeImmutable)#4 (3) { 
    ["date"]=> 
    string(26) "2016-10-01 00:00:00.000000" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(10) "US/Pacific" 
} 
int(1) 
int(0) 
+0

आप आपत्ति तो नहीं है 'var_dump'ing घंटे, मिनट, सेकंड और मिलीसेकेंड के साथ-साथ? – Mchl

+0

क्या यह PHP में ही एक बग हो सकता है? –

+0

@ माइकल हिर्शलर शायद, मुझे यकीन नहीं है, यही कारण है कि मैंने अपना प्रश्न SO पर पोस्ट किया – patie

उत्तर

0

मुझे लगता है कि यह व्यवहार इस टिकट में वर्णित है:

https://bugs.php.net/bug.php?id=52480

तो, हाँ यह PHP में एक बग हो रहा है।

1

यह PHP दिनांक समय कक्षा में वास्तव में एक छोटी सी बग है। आप UTC समय क्षेत्र का उपयोग करें और गणना के बाद वांछित समय क्षेत्र सेट करना होगा:

date_default_timezone_set('UTC'); 

$europePrag = new DateTimeZone('Europe/Prague'); 
$usPacific = new DateTimeZone('US/Pacific'); 

$from = new \DateTimeImmutable('2016-11-01'); 
$to = $from->add(new \DateInterval('P1M')); 
$from->setTimezone($europePrag); 
var_dump($from); 
var_dump($to); 
var_dump($from->diff($to)->m); 
var_dump($from->diff($to)->d); 


$from = new \DateTimeImmutable('2016-11-01'); 
$to = $from->add(new \DateInterval('P1M')); 
$from->setTimezone($usPacific); 
var_dump($from); 
var_dump($to); 
var_dump($from->diff($to)->m); 
var_dump($from->diff($to)->d); 
संबंधित मुद्दे