पीएचपी डेलाइट समय का पता लगाने की बचत

वोट
25

मैं 9:00 बजे स्थानीय समय में विश्व में कहीं भी आधार पर उपयोगकर्ताओं के लिए एक ईमेल भेजने की जरूरत है। सर्वर ब्रिटेन में है। मैं क्या कर सकते हैं प्रत्येक उपयोगकर्ता और सर्वर के समय है, जो तब पूरी तरह से करता है, तो डीएसटी मौजूद नहीं था काम करेगा जो समय अंतर की स्थापना की है।

यहाँ यह वर्णन करने के लिए एक उदाहरण है:

  • जॉन सर्वर (यूके) समय से न्यूयॉर्क में काम करता है, -5 घंटे
  • रिचर्ड लंदन, ब्रिटेन में काम करता है, तो सर्वर के साथ 0 घंटे का अंतर है।

सर्वर एक निश्चित रविवार को 2:00 बजे जीएमटी +1 (बीएसटी) को GMT से हो जाता है, इसका मतलब है कि जॉन अब अब एक -6H समय अंतर है।

इस परिदृश्य मैं अभी भी सर्वर के स्थानीय समय के बाहर सभी उपयोगकर्ताओं को अपडेट करके संभाल कर सकते हैं, लेकिन एक बार मैं आगे / पीछे अन्य सभी उपयोगकर्ताओं के समय स्थानांतरित कर दिया है, मैं अभी भी पता लगाने के लिए कोई तरीका होना चाहिए जब उन रहने वाले (समय और तारीख) ब्रिटेन के बाहर (या नहीं होगा) अपने स्थानीय समय एक संभावित डीएसटी एक करने के लिए बदल जाएगा।

मैं एक PHP प्रणाली की जरुरत पता / पता लगाने जब दुनिया के अन्य भागों / बाहर निकलें डीएसटी में प्रवेश करेंगे करने के लिए।

27/05/2011 को 17:35
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
12

मेरा उत्तर एक सा बदलना: DateTimeZone :: getTransitions लगता है कि यह है कि तुम क्या जरूरत है क्या करेंगे, आप पीएचपी> = 5.2 प्रदान की है।

दस्तावेज में एक टिप्पणी से:

<?php 
$theTime = time(); // specific date/time we're checking, in epoch seconds. 

$tz = new DateTimeZone('America/Los_Angeles'); 
$transition = $tz->getTransitions($theTime, $theTime); 

// only one array should be returned into $transition. Now get the data: 
$offset = $transition[0]['offset']; 
$abbr = $transition[0]['abbr']; 
?>

तो यहाँ, सब हम क्या करने की जरूरत समय क्षेत्र हम जाँच करना चाहते हैं में पारित किया जाता है और अगर उस समय क्षेत्र डीएसटी / क्या ऑफसेट है में है कि हम जानते हैं कर सकते हैं। इसके बाद आप जीएमटी के खिलाफ ऑफसेट यदि आप अब अपने ई-मेल भेजने के लिए या अब चाहते हैं, नहीं देखने के लिए जाँच की आवश्यकता होगी।

27/05/2011 को 17:40
का स्रोत उपयोगकर्ता

वोट
23

आप डीएसटी के सभी विवरण पता करने के लिए अपने आप को संक्रमण की ज़रूरत है? या यदि आप बस पता करने के लिए जब एक दिया समयक्षेत्र इन 9:00 AM है की जरूरत है?

यदि यह उत्तरार्द्ध है, पीएचपी करने के लिए है कि आप के लिए अपने ऑपरेटिंग सिस्टम के समय क्षेत्र डेटाबेस का उपयोग कर सकते हैं। Strtotime () समारोह उल्लेखनीय अच्छा है पर "पता लगाना" तुम क्या मतलब है:

echo strtotime("today 9:00 am America/New_York");  // prints "1306501200"
echo strtotime("today 9:00 am Europe/London");     // prints "1306483200"

बस सुनिश्चित करें कि आप में से एक का उपयोग कर रहे पीएचपी समर्थित समय क्षेत्र

27/05/2011 को 19:40
का स्रोत उपयोगकर्ता

वोट
19

जिमी बताते हैं के रूप में आप समय क्षेत्र संक्रमण का उपयोग कर सकते हैं, लेकिन यह पीएचपी <5.3 पर उपलब्ध नहीं है। dateTimeZone के रूप में () पीएचपी> = 5.2.2 लेकिन getTransitions () तर्क के साथ नहीं है! उस मामले में यहां एक समारोह है कि आप, समय क्षेत्र डेटा दे सकते हैं डीएसटी में है या नहीं भी शामिल है।

function timezonez($timezone = 'Europe/London'){
    $tz = new DateTimeZone($timezone);
    $transitions = $tz->getTransitions();
    if (is_array($transitions)){
        foreach ($transitions as $k => $t){
            // look for current year
            if (substr($t['time'],0,4) == date('Y')){
                $trans = $t;
                break;
            }
        }
    }
    return (isset($trans)) ? $trans : false;
}

कहा करने के बाद, वहाँ तिथि () यदि आप सिर्फ जानना चाहता है कि क्या एक समय क्षेत्र डीएसटी में है की जरूरत का उपयोग कर एक सरल तरीका है। उदाहरण के लिए आप जानना चाहते हैं कि ब्रिटेन डीएसटी में आप यह कर सकते हैं चाहते हैं:

date_default_timezone_set('Europe/London');
$bool = date('I'); // this will be 1 in DST or else 0

... या तिथि () यदि आप अपने वर्तमान सर्वर समय के अलावा किसी अन्य datetime निर्दिष्ट करना चाहते हैं के लिए एक दूसरी आर्ग के रूप में एक टाइमस्टैम्प की आपूर्ति।

14/06/2012 को 13:02
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more