2012-10-17 15 views
6

डेटटाइम ऑब्जेक्ट से, मुझे अलग-अलग टाइमज़ोन में समय प्राप्त करने में दिलचस्पी है। रूप DateTime::setTimezone दस्तावेज़ में बताया गया है, यह बहुत अच्छी तरह से जब समयदिनाँक वस्तु एक स्ट्रिंग से बनाई गई है काम करता है:PHP डेटटाइम ऑब्जेक्ट - टाइमस्टैम्प और टाइमज़ोन संघर्ष

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('UTC')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

echo $date->getTimestamp() . "\n"; 

उपरोक्त उदाहरण होगा उत्पादन:
2000/01/01 00: 00: 00 + 12: 00
2000/01/01 01: 45: 00 + 13: 45
1999/12/31 12: 00: 00 + 00: 00

अब दिलचस्प हिस्सा है: यदि हम लेने हमारे टाइमस्टैम्प को ऊपर उठाएं, और मैन्युअल निर्देशों के बाद इसके साथ हमारे डेटटाइम ऑब्जेक्ट को शुरू करें।

$date2 = new DateTime('@946641600'); 

$date2->setTimezone(new DateTimeZone('Pacific/Nauru')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

$date2->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

$date2->setTimezone(new DateTimeZone('UTC')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

echo $date2->getTimestamp() . "\n"; 

और यहाँ पर हम पाते हैं: // [संपादित करें] humm ... क्षमा करें, यह उत्पादन गलत है ...
1999/12/31 12: 00: 00 + 00: 00
1999- 12-31 12: 00: 00 + 00: 00
1999/12/31 12: 00: 00 + 00: 00

यूटीसी हमेशा के लिए !!! हम अब टाइमज़ोन नहीं बदल सकते हैं!

क्या यह PHP है या यह मैं हूं? संस्करण 5.3.15

+1

क्या आप टाइमस्टैम्प के साथ तत्काल पर टाइमज़ोन निर्दिष्ट नहीं करना चाहते हैं? –

+0

मुझे यहां एक अलग परिणाम मिल रहा है http://codepad.viper-7.com/zAv8dz – Baba

+0

यह संस्करण 5.3.15 ....... – Baba

उत्तर

5

ठीक है, इसलिए मैं अपने आप से पागल हो रहा था। बेशक, मैं गलत होने के लिए एक ...
यह सीधे मिलता है, मैं तो बस बिट्स कि दस्तावेज़ here और here में relevants हैं लेने आऊँगा करने के लिए कर रहा हूँ।
मैनुअल का कहना है:

// Using a UNIX timestamp. Notice the result is in the UTC time zone. 
$date = new DateTime('@946684800'); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

तो वास्तव में, आप setTimezone उपयोग कर सकते हैं आपके समय क्षेत्र में फिर से समय की जानकारी प्राप्त करने के लिए (जो उम्मीद की जा सकती है, तो आपके सिस्टम कि जिस तरह से सेट किया गया है!):

$timezone = new DateTimeZone('Europe/Madrid'); 
$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 

ध्यान दें कि

$date = new DateTime('@1306123200', new DateTimeZone('Europe/Madrid')); 

, भ्रामक है जब से तुम यूटीसी में वैसे भी हो जाएगा! (और हाँ, यह कन्स्ट्रक्टर के दस्तावेज़ में बहुत स्पष्ट रूप से निर्दिष्ट है। इसलिए सावधान रहें;)

धन्यवाद @hakre धन्यवाद सब!

+0

यदि आपको MySQL प्रारूप में एक तिथि (आपके टाइमज़ोन के अनुरूप) है, तो आप निम्न का भी उपयोग कर सकते हैं: $ mysql_time = date ("वाई-एम-डी एच: i: s", $ ts_time); – mika

संबंधित मुद्दे