2011-01-20 15 views
33

संभव डुप्लिकेट मिलती है:
How can I determine a web user's time zone?उपयोगकर्ता समय क्षेत्र

यह करने के लिए सबसे अच्छा तरीका है कौन? PHP या जावास्क्रिप्ट। क्या कोई मुझे कुछ स्निपेट प्रदान कर सकता है? धन्यवाद।

उत्तर

48

यह आपको एक PHP चर के रूप में समय क्षेत्र मिल जाएगा। मैंने jQuery और PHP का उपयोग करके एक फ़ंक्शन लिखा था। यह परीक्षण किया जाता है, और काम करता है!

पीएचपी पृष्ठ है जहाँ आप एक चर के रूप में समय क्षेत्र करना चाहते हैं कर रहे हैं पर, कहीं पेज के शीर्ष के पास कोड के इस स्निपेट है:

<?php  
    session_start(); 
    $timezone = $_SESSION['time']; 
?> 

इस सत्र चर "समय" दिखाया जाएगा, जो हम अब बनाने वाले हैं।

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
<head> खंड में

इसके अलावा ,, पेस्ट इस jQuery:

उसी पृष्ठ पर, <head> अनुभाग में, सब से पहले आप jQuery शामिल करने की ज़रूरत

<script type="text/javascript"> 
    $(document).ready(function() { 
     if("<?php echo $timezone; ?>".length==0){ 
      var visitortime = new Date(); 
      var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; 
      $.ajax({ 
       type: "GET", 
       url: "http://domain.com/timezone.php", 
       data: 'time='+ visitortimezone, 
       success: function(){ 
        location.reload(); 
       } 
      }); 
     } 
    }); 
</script> 

आप कर सकते हैं या आपने ध्यान नहीं दिया हो सकता है, लेकिन आपको यूआरएल को अपने वास्तविक डोमेन में बदलने की जरूरत है।

एक आखिरी बात। आप शायद सोच रहे हैं कि बिल्ली timezone.php क्या है।

<?php 
    session_start(); 
    $_SESSION['time'] = $_GET['time']; 
?> 

इस सही ढंग से काम करता है, यह प्रथम पृष्ठ लोड होगा (timezone.php और बिंदु से ऊपर यूआरएल के साथ यह करने के लिए कहा जाता है एक नई फ़ाइल बनाना), JavaScript निष्पादित: ठीक है, यह केवल यह है , और पेज को फिर से लोड करें। फिर आप $ टाइमज़ोन चर को पढ़ने में सक्षम होंगे और इसे आपकी खुशी के लिए उपयोग करेंगे! यह वर्तमान यूटीसी/जीएमटी समय क्षेत्र ऑफसेट (जीएमटी -7) या जो भी समय क्षेत्र आप में हैं, लौटाता है।

आप इस बारे में और अधिक पढ़ सकते हैं मेरी blog

चीयर्स पर

</Westy92>

+0

मैं लगभग इस पर छोड़ दिया! धन्यवाद ! – andrei

+1

मुझे $ टाइमज़ोन अपरिभाषित कहने में त्रुटि हो रही है। क्यूं कर? – arboles

+6

मुझे लगता है कि यह समाधान मौलिक रूप से गलत है (कम से कम कुछ परिस्थितियों में), क्योंकि यह उपयोगकर्ता को जो कुछ भी चाहता है, उसे बदलने के लिए अनुमति देता है, बस http://domain.com/timezone.php –

9

जैसे ओडेड ने उत्तर दिया है। आपको जावास्क्रिप्ट में इस प्रकार की पहचान कार्यक्षमता की आवश्यकता है।

मैंने अपने साथ संघर्ष किया है और महसूस किया है कि ऑफसेट पर्याप्त नहीं है। यह आपको उदाहरण के लिए डेलाइट सेविंग के बारे में कोई जानकारी नहीं देता है। मैं zininfo डेटाबेस कुंजी को मैप करने के लिए कुछ कोड लिखना समाप्त कर दिया।

एक वर्ष के आसपास कई तिथियों की जांच करके आप एक सटीक रूप से टाइमज़ोन निर्धारित कर सकते हैं।

यहाँ स्क्रिप्ट का प्रयास करें: http://jsfiddle.net/pellepim/CsNcf/

आप अपने सिस्टम समय क्षेत्र बदलने के लिए और रन क्लिक करें यह परीक्षण करने के लिए। यदि आप क्रोम चला रहे हैं तो आपको प्रत्येक टेस्ट को एक नए टैब में करने की आवश्यकता है हालांकि (और टाइमज़ोन परिवर्तन लेने के लिए सफार को पुनरारंभ करने की आवश्यकता है)।

आप की जाँच कोड के अधिक विवरण चाहते हैं: https://bitbucket.org/pellepim/jstimezonedetect/

+0

यह शायद सबसे उचित दृष्टिकोण है। –

27

सर्वर साइड पर यह जावास्क्रिप्ट के साथ के रूप में के रूप में सही नहीं होगा। इस बीच, कभी-कभी इस तरह के कार्य को हल करने की आवश्यकता होती है। इस मामले में संभावित समाधान साझा करने के लिए मैं यह जवाब लिखता हूं।

यदि आपको उपयोगकर्ता का समय क्षेत्र निर्धारित करने की आवश्यकता है तो यह भू-आईपी सेवाओं के माध्यम से किया जा सकता है। उनमें से कुछ टाइमज़ोन प्रदान करते हैं। उदाहरण के लिए, यह एक (http://smart-ip.net/geoip-api) मदद कर सकता है:

<?php 
$ip  = $_SERVER['REMOTE_ADDR']; // means we got user's IP address 
$json = file_get_contents('http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP 
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.) 
$ipData = json_decode($json, true); 

if ($ipData['timezone']) { 
    $tz = new DateTimeZone($ipData['timezone']); 
    $now = new DateTime('now', $tz); // DateTime object corellated to user's timezone 
} else { 
    // we can't determine a timezone - do something else... 
} 
+1

http://smart-ip.net/ अब उपलब्ध नहीं है। तो यह समाधान अस्पष्ट है। मुझे लगता है कि वे अपने सर्वर को बंद कर देते हैं। तो इस कोड का प्रयोग अपने जोखिम पर करें क्योंकि इसके द्वारा परिणाम नल शून्य है। –

+2

(-1) http://smart-ip.net/geoip-json/202.191.214.178 - सेवा अस्थायी अनुपलब्ध – Chinmay235

+3

अब आप इस साइट को आजमा सकते हैं: http://ip-api.com/json/। –

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