क्या वेब सर्वर के लिए एक मानक तरीका है जो किसी वेब पेज के भीतर उपयोगकर्ता के टाइमज़ोन को निर्धारित करने में सक्षम हो सकता है?
शायद एक HTTP शीर्ष लेख या के भाग से user-agent
स्ट्रिंग के ?
क्या वेब सर्वर के लिए एक मानक तरीका है जो किसी वेब पेज के भीतर उपयोगकर्ता के टाइमज़ोन को निर्धारित करने में सक्षम हो सकता है?
शायद एक HTTP शीर्ष लेख या के भाग से user-agent
स्ट्रिंग के ?
जवाबों:
-new Date().getTimezoneOffset()/60;
विधि getTimezoneOffset()
GMT से आपका समय घटाएगी और मिनटों की संख्या लौटाएगी। इसलिए यदि आप GMT-8 में रहते हैं, तो यह 480 पर वापस आ जाएगी।
इसे घंटे में रखने के लिए, 60 से विभाजित करें। यह भी ध्यान दें कि संकेत आपके द्वारा की गई आवश्यकता के विपरीत है - यह आपके समय क्षेत्र से GMT की ऑफ़सेट की गणना कर रहा है, न कि आपके समय क्षेत्र की ऑफसेट GMT से। इसे ठीक करने के लिए, बस 1 से गुणा करें।
यह भी ध्यान दें कि w3school कहता है:
डेलाइट सेविंग टाइम का उपयोग करने के अभ्यास के कारण, लौटाया गया मान स्थिर नहीं है।
>>> date.toTimeString() "15:46:04 GMT+1200 (New Zealand Standard Time)"
सबसे लोकप्रिय (== मानक?) जो समय क्षेत्र मैंने देखा है उसके निर्धारण का तरीका केवल उपयोगकर्ताओं से स्वयं पूछ रहा है । यदि आपकी वेबसाइट को सदस्यता की आवश्यकता है, तो इसे उपयोगकर्ताओं के प्रोफ़ाइल डेटा में सहेजा जा सकता है। एनॉन उपयोगकर्ताओं के लिए, तिथियां यूटीसी या जीएमटी या कुछ इस तरह प्रदर्शित की जा सकती हैं।
मैं स्मार्ट अलेक बनने की कोशिश नहीं कर रहा हूं। यह सिर्फ इतना है कि कभी-कभी कुछ समस्याओं के किसी भी प्रोग्रामिंग संदर्भ के बाहर बेहतर समाधान होते हैं।
कोई HTTP हेडर नहीं है जो ग्राहकों को अब तक के टाइमज़ोन की रिपोर्ट करेगा, हालांकि इसे HTTP विनिर्देश में शामिल करने का सुझाव दिया गया है।
अगर यह मैं था, तो शायद मैं क्लाइंटसाइड जावास्क्रिप्ट का उपयोग करके टाइमज़ोन लाने की कोशिश करूंगा और फिर इसे अजाक्स या कुछ और का उपयोग करके सर्वर में जमा करूंगा।
क्लाइंट के स्थानीय समय को प्राप्त करने के लिए जावास्क्रिप्ट सबसे आसान तरीका है। मैं स्थानीय समय वापस भेजने के लिए एक XMLHttpRequest का उपयोग करने का सुझाव दूंगा , और यदि वह विफल रहता है, तो उनके आईपी पते के आधार पर वापस पाए गए समयक्षेत्र में गिर जाते हैं।
जहां तक जियोलोकेशन की बात है, मैंने कई प्रोजेक्ट्स पर MaxMind GeoIP का उपयोग किया है और यह अच्छी तरह से काम करता है, हालांकि मुझे यकीन नहीं है कि वे टाइमज़ोन डेटा प्रदान करते हैं। यह एक ऐसी सेवा है जिसके लिए आप भुगतान करते हैं और वे आपके डेटाबेस को मासिक अपडेट प्रदान करते हैं। वे कई वेब भाषाओं में रैपर प्रदान करते हैं।
सबसे पहले, यह समझें कि जावास्क्रिप्ट में समय क्षेत्र का पता लगाना अपूर्ण है। आप किसी विशेष दिनांक और समय के लिए स्थानीय समय क्षेत्रgetTimezoneOffset
को Date
ऑब्जेक्ट के इंस्टेंस पर उपयोग करके प्राप्त कर सकते हैं , लेकिन यह एक पूर्ण IANA समय क्षेत्र के समान नहीं है America/Los_Angeles
।
कुछ विकल्प हैं जो हालांकि काम कर सकते हैं:
const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(tzid);
परिणाम एक स्ट्रिंग है जिसमें कंप्यूटर का IANA समय क्षेत्र सेटिंग है जहां कोड चल रहा है।
Intl संगतता तालिका में समर्थित वातावरण सूचीबद्ध हैं । DateTimeFormat
अनुभाग का विस्तार करें , और नामित सुविधा को देखें resolvedOptions().timeZone defaults to the host environment
।
कुछ पुस्तकालय, जैसे लक्सन इस एपीआई का उपयोग कार्यों जैसे समय क्षेत्र को निर्धारित करने के लिए करते हैं luxon.Settings.defaultZoneName
।
Intl
एपीआई की कोशिश करके काम करते हैं , और जब यह उपलब्ध नहीं होता है, तो वे आंतरिक getTimezoneOffset
फ़ंक्शन Date
सेट से उपयुक्त समय क्षेत्र चुनने के लिए परिणामों का उपयोग करते हुए, समय में कई अलग-अलग बिंदुओं के लिए ऑब्जेक्ट के कार्य से पूछताछ करते हैं ।JsTimezoneDetect और क्षण-समय दोनों में यह कार्यक्षमता है।
// using jsTimeZoneDetect
var tzid = jstz.determine().name();
// using moment-timezone
var tzid = moment.tz.guess();
दोनों ही मामलों में, परिणाम केवल एक अनुमान के रूप में सोचा जा सकता है। अनुमान कई मामलों में सही हो सकता है, लेकिन उन सभी में नहीं।
इसके अतिरिक्त, इन पुस्तकालयों को समय-समय पर इस तथ्य से मुकाबला करने के लिए अद्यतन किया जाता है कि कई पुराने जावास्क्रिप्ट कार्यान्वयन केवल अपने स्थानीय समय क्षेत्र के लिए वर्तमान डेलाइट बचत समय नियम से अवगत हैं । उस पर अधिक जानकारी यहाँ।
अंत में, एक बेहतर तरीका यह है कि वास्तव में अपने उपयोगकर्ता से उनके समय क्षेत्र के लिए पूछें। एक सेटिंग प्रदान करें जो वे बदल सकते हैं। आप डिफ़ॉल्ट सेटिंग चुनने के लिए उपरोक्त विकल्पों में से एक का उपयोग कर सकते हैं , लेकिन अपने ऐप में उस से विचलन करना असंभव नहीं है।
उपयोगकर्ता के कंप्यूटर पर समय क्षेत्र सेटिंग पर निर्भर नहीं होने का पूरी तरह से अलग तरीका भी है । इसके बजाय, यदि आप अक्षांश और देशांतर निर्देशांक एकत्र कर सकते हैं, तो आप इनमें से किसी एक विधि का उपयोग करके समय क्षेत्र को हल कर सकते हैं । यह मोबाइल उपकरणों पर अच्छा काम करता है।
ब्राउज़र जिस टाइम ज़ोन में है उसे निर्धारित करने के लिए यहाँ एक मजबूत जावास्क्रिप्ट सॉल्यूशन है।
>>> var timezone = jstz.determine();
>>> timezone.name();
"Europe/London"
https://bitbucket.org/pellepim/jstimezonedetect
परिशिष्ट 1: अब यह परियोजना GitHub पर स्थित है: https://github.com/pellepim/jstimezonetect
यहाँ एक और अधिक पूर्ण तरीका है।
एक अंश नीचे है:
function TimezoneDetect(){
var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
var intMonth;
var intHoursUtc;
var intHours;
var intDaysMultiplyBy;
// Go through each month to find the lowest offset to account for DST
for (intMonth=0;intMonth < 12;intMonth++){
//go to the next month
dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);
// To ignore daylight saving time look for the lowest offset.
// Since, during DST, the clock moves forward, it'll be a bigger number.
if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
intOffset = (dtDate.getTimezoneOffset() * (-1));
}
}
return intOffset;
}
जेएस (रास्ता बैक मशीन के माध्यम से) से टीएस और डीएसटी प्राप्त करना
Africa/Johannesburg
या Europe/Istanbul
। टाइमजोन टैग विकि देखें ।
Unkwntech के दृष्टिकोण का उपयोग करते हुए, मैंने jQuery और PHP का उपयोग करते हुए एक फ़ंक्शन लिखा। यह परीक्षण किया है और काम करता है!
PHP पृष्ठ पर जहाँ आप चर के रूप में टाइमज़ोन रखना चाहते हैं, पृष्ठ के शीर्ष के पास कहीं पर कोड का यह टुकड़ा है:
<?php
session_start();
$timezone = $_SESSION['time'];
?>
यह सत्र चर "समय" को पढ़ेगा, जिसे हम अब बनाने वाले हैं।
उसी पृष्ठ पर, <head> में, आपको सबसे पहले jQuery शामिल करना होगा:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
JQuery के नीचे <head> में भी इसे पेस्ट करें:
<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://example.org/timezone.php",
data: 'time='+ visitortimezone,
success: function(){
location.reload();
}
});
}
});
</script>
आपने देखा या नहीं देखा होगा, लेकिन आपको URL को अपने वास्तविक डोमेन में बदलने की आवश्यकता है।
एक अंतिम बात। आप शायद सोच रहे हैं कि बिल्ली timezone.php क्या है। ठीक है, यह केवल इस प्रकार है: (एक नई फ़ाइल बनाने के लिए जिसे timezone.php कहा जाता है और उपरोक्त URL के साथ इंगित करें)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
यदि यह सही ढंग से काम करता है, तो यह पहले पृष्ठ को लोड करेगा, जावास्क्रिप्ट को निष्पादित करेगा और पृष्ठ को फिर से लोड करेगा। तब आप $ timezone चर को पढ़ने और अपनी खुशी के लिए इसका उपयोग करने में सक्षम होंगे! यह वर्तमान UTC / GMT टाइम ज़ोन ऑफ़सेट (GMT -7) या आप जो भी समयक्षेत्र में हैं, उसे लौटाता है।
AJAX के अनुरोध पर jQuery के साथ HTTP हेडर के रूप में टाइमज़ोन ऑफसेट सबमिट करने के लिए
$.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60);
}
});
आप http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/moment.tz.guess();
से भी वास्तविक समय क्षेत्र नाम प्राप्त करने के लिए ऐसा ही कुछ कर सकते हैं
मुझे अभी भी यहां एक विस्तृत उत्तर नहीं मिला है जो समय क्षेत्र को प्राप्त करता है। आपको IP पते से जियोकोड की आवश्यकता नहीं होनी चाहिए या किसी ऑफसेट से PHP (lol) या गलत अनुमान का उपयोग नहीं करना चाहिए।
सबसे पहले एक समय क्षेत्र GMT से सिर्फ एक ऑफसेट नहीं है। यह भूमि का एक क्षेत्र है जिसमें स्थानीय मानकों द्वारा समय नियम निर्धारित किए जाते हैं। कुछ देशों में दिन के उजाले की बचत होती है, और अलग-अलग समय पर डीएसटी पर स्विच किया जाएगा। आमतौर पर वास्तविक क्षेत्र प्राप्त करना महत्वपूर्ण है, न कि केवल वर्तमान ऑफसेट।
यदि आप इस समयक्षेत्र को संग्रहीत करने का इरादा रखते हैं, उदाहरण के लिए उपयोगकर्ता प्राथमिकताओं में आप ज़ोन चाहते हैं न कि केवल ऑफ़सेट। रीयलटाइम रूपांतरणों के लिए यह ज्यादा मायने नहीं रखेगा।
अब, जावास्क्रिप्ट के साथ समय क्षेत्र प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं:
>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.
हालाँकि मुझे यह मजबूत प्लगइन का उपयोग करना आसान लगा, जो ऑलसेन स्वरूपित टाइमज़ोन को लौटाता है:
PHP date
फ़ंक्शन के साथ आपको सर्वर का दिनांक समय मिलेगा, जिस पर साइट स्थित है। उपयोगकर्ता के समय को प्राप्त करने का एकमात्र तरीका जावास्क्रिप्ट का उपयोग करना है।
लेकिन मैं आपको सुझाव देता हूं, यदि आपकी साइट के लिए पंजीकरण आवश्यक है, तो सबसे अच्छा तरीका यह है कि उपयोगकर्ता को अनिवार्य फ़ील्ड के रूप में पंजीकरण करने के लिए कहें। आप रजिस्टर पृष्ठ में विभिन्न समय क्षेत्रों को सूचीबद्ध कर सकते हैं और डेटाबेस में सहेज सकते हैं। इसके बाद, यदि उपयोगकर्ता साइट में लॉग इन करता है तो आप उस सत्र के लिए डिफ़ॉल्ट समय क्षेत्र को उपयोगकर्ताओं के चयनित समय क्षेत्र के अनुसार निर्धारित कर सकते हैं।
आप PHP फ़ंक्शन का उपयोग करके किसी भी विशिष्ट समय क्षेत्र को सेट कर सकते हैं date_default_timezone_set
। यह उपयोगकर्ताओं के लिए निर्दिष्ट समय क्षेत्र निर्धारित करता है।
मूल रूप से उपयोगकर्ताओं का समय क्षेत्र क्लाइंट की ओर जाता है, इसलिए हमें इसके लिए जावास्क्रिप्ट का उपयोग करना चाहिए।
नीचे PHP और जावास्क्रिप्ट का उपयोग करके उपयोगकर्ताओं का समय क्षेत्र प्राप्त करने के लिए स्क्रिप्ट है।
<?php
#http://www.php.net/manual/en/timezones.php List of Time Zones
function showclienttime()
{
if(!isset($_COOKIE['GMT_bias']))
{
?>
<script type="text/javascript">
var Cookies = {};
Cookies.create = function (name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else {
var expires = "";
}
document.cookie = name + "=" + value + expires + "; path=/";
this[name] = value;
}
var now = new Date();
Cookies.create("GMT_bias",now.getTimezoneOffset(),1);
window.location = "<?php echo $_SERVER['PHP_SELF'];?>";
</script>
<?php
}
else {
$fct_clientbias = $_COOKIE['GMT_bias'];
}
$fct_servertimedata = gettimeofday();
$fct_servertime = $fct_servertimedata['sec'];
$fct_serverbias = $fct_servertimedata['minuteswest'];
$fct_totalbias = $fct_serverbias – $fct_clientbias;
$fct_totalbias = $fct_totalbias * 60;
$fct_clienttimestamp = $fct_servertime + $fct_totalbias;
$fct_time = time();
$fct_year = strftime("%Y", $fct_clienttimestamp);
$fct_month = strftime("%B", $fct_clienttimestamp);
$fct_day = strftime("%d", $fct_clienttimestamp);
$fct_hour = strftime("%I", $fct_clienttimestamp);
$fct_minute = strftime("%M", $fct_clienttimestamp);
$fct_second = strftime("%S", $fct_clienttimestamp);
$fct_am_pm = strftime("%p", $fct_clienttimestamp);
echo $fct_day.", ".$fct_month." ".$fct_year." ( ".$fct_hour.":".$fct_minute.":".$fct_second." ".$fct_am_pm." )";
}
showclienttime();
?>
लेकिन मेरे दृष्टिकोण के अनुसार, उपयोगकर्ताओं से पूछना बेहतर है कि क्या आपके प्रोजेक्ट में पंजीकरण अनिवार्य है।
निश्चित रूप से स्थान (और इसलिए टाइमज़ोन) निर्धारित करने के लिए आईपी पते का उपयोग न करें - ऐसा इसलिए है क्योंकि एनएटी, प्रॉक्सी (तेजी से लोकप्रिय), और वीपीएन के साथ, आईपी पते आवश्यक रूप से उपयोगकर्ता के वास्तविक स्थान को प्रतिबिंबित नहीं करते हैं, लेकिन जिस स्थान पर है। उन प्रोटोकॉल को लागू करने वाले सर्वर रहते हैं।
एक नंबर उपयोगकर्ता की संख्या पोर्टेबिलिटी की लोकप्रियता को देखते हुए अमेरिकी क्षेत्र कोड अब उपयोगी नहीं हैं।
IP पता और ऊपर दिखाई गई अन्य तकनीकें डिफ़ॉल्ट को सुझाने के लिए उपयोगी हैं जिन्हें उपयोगकर्ता समायोजित / सही कर सकता है।
जावास्क्रिप्ट:
function maketimus(timestampz)
{
var linktime = new Date(timestampz * 1000);
var linkday = linktime.getDate();
var freakingmonths = new Array();
freakingmonths[0] = "jan";
freakingmonths[1] = "feb";
freakingmonths[2] = "mar";
freakingmonths[3] = "apr";
freakingmonths[4] = "may";
freakingmonths[5] = "jun";
freakingmonths[6] = "jul";
freakingmonths[7] = "aug";
freakingmonths[8] = "sep";
freakingmonths[9] = "oct";
freakingmonths[10] = "nov";
freakingmonths[11] = "dec";
var linkmonthnum = linktime.getMonth();
var linkmonth = freakingmonths[linkmonthnum];
var linkyear = linktime.getFullYear();
var linkhour = linktime.getHours();
var linkminute = linktime.getMinutes();
if (linkminute < 10)
{
linkminute = "0" + linkminute;
}
var fomratedtime = linkday + linkmonth + linkyear + " " +
linkhour + ":" + linkminute + "h";
return fomratedtime;
}
बस इस समारोह में यूनिक्स टाइमस्टैम्प प्रारूप में अपना समय प्रदान करें; जावास्क्रिप्ट पहले से ही उपयोगकर्ता का समय क्षेत्र जानता है।
ऐशे ही:
पीएचपी:
echo '<script type="text/javascript">
var eltimio = maketimus('.$unix_timestamp_ofshiz.');
document.write(eltimio);
</script><noscript>pls enable javascript</noscript>';
यह हमेशा उस समय को सही ढंग से दिखाएगा जो व्यक्ति ने अपने कंप्यूटर घड़ी पर निर्धारित समय-क्षेत्र के आधार पर किया है। किसी को कुछ भी पूछने और स्थानों में सहेजने की आवश्यकता नहीं है, भगवान का शुक्र है!
आसान, जैसे जावास्क्रिप्ट getTimezoneOffset
फ़ंक्शन का उपयोग करें:
-new Date().getTimezoneOffset()/60;
जादू सब में लगता है
visitortime.getTimezoneOffset()
यह अच्छा है, मुझे इसके बारे में पता नहीं था। क्या यह इंटरनेट एक्सप्लोरर, आदि में काम करता है? वहां से आपको जावास्क्रिप्ट को अजाक्स में उपयोग करने में सक्षम होना चाहिए, कुकीज़ सेट करें, जो भी हो। मैं शायद खुद कुकी मार्ग जाऊँगा।
यद्यपि आपको उपयोगकर्ता को इसे बदलने की अनुमति देने की आवश्यकता होगी। हमने कुछ समय पहले ऐसा करने के लिए जियोलोकेशन (मैक्समाइंड के माध्यम से) का उपयोग करने की कोशिश की थी, और यह अक्सर यथोचित रूप से गलत था - इसे करने लायक बनाने के लिए पर्याप्त है, इसलिए हम केवल उपयोगकर्ता को उनकी प्रोफ़ाइल में सेट करते हैं, और उन उपयोगकर्ताओं को एक नोटिस दिखाते हैं जो अभी तक उनका सेट नहीं किया है।
यहां एक लेख है (स्रोत कोड के साथ) जो बताता है कि कैसे एक ASP.NET (VB.NET, C)) में स्थानीयकृत समय का निर्धारण और उपयोग करना है:
संक्षेप में, वर्णित दृष्टिकोण जावास्क्रिप्ट getTimezoneOffset
फ़ंक्शन पर निर्भर करता है , जो कि सत्र कुकी में सहेजे गए मान और GMT और स्थानीय समय के बीच समय मूल्यों को समायोजित करने के लिए कोड-बैक द्वारा उपयोग किया जाता है। अच्छी बात यह है कि उपयोगकर्ता को समय क्षेत्र (कोड स्वचालित रूप से करता है) निर्दिष्ट करने की आवश्यकता नहीं है। अधिक शामिल है (यही कारण है कि मैं लेख से लिंक करता हूं), लेकिन प्रदान किया गया कोड वास्तव में उपयोग करना आसान बनाता है। मुझे संदेह है कि आप तर्क को PHP और अन्य भाषाओं में परिवर्तित कर सकते हैं (जब तक आप ASP.NET समझते हैं)।
यदि आप प्रमाणीकरण के लिए OpenID का उपयोग करते हैं, तो साधारण पंजीकरण एक्सटेंशन प्रमाणित उपयोगकर्ताओं के लिए समस्या का समाधान करेगा (आपको tz से संख्यात्मक में कनवर्ट करना होगा)।
एक अन्य विकल्प उपयोगकर्ता एजेंट की देश की प्राथमिकता से समय क्षेत्र का अनुमान लगाना होगा। यह कुछ हद तक कच्चा तरीका है (एन-यूएस के लिए काम नहीं करेगा), लेकिन एक अच्छा अनुमान है।
यह जावास्क्रिप्ट और PHP के साथ सरल है:
भले ही उपयोगकर्ता अपनी आंतरिक घड़ी और / या टाइमज़ोन के साथ गड़बड़ कर सकता है, फिर भी, मैंने ऑफसेट प्राप्त करने के लिए सबसे अच्छा तरीका पाया new Date().getTimezoneOffset();
। यह गैर-आक्रामक है, सिर दर्द नहीं देता है और तीसरे पक्ष पर भरोसा करने की आवश्यकता को समाप्त करता है।
कहो कि मेरे पास एक मेज है, users
जिसमें एक क्षेत्र है date_created int(13)
, जिसमें यूनिक्स टाइमस्टैम्प संग्रहीत हैं;
क्लाइंट मानकर creates a new account
, डेटा प्राप्त किया जाता है post
, और मुझे क्लाइंट के यूनिक्स टाइमस्टैम्प insert/update
के date_created column
साथ की जरूरत है , न कि सर्वर की।
चूँकि टाइमज़ोनऑफ़सेट डालने / अपडेट के समय की आवश्यकता होती है, इसे ग्राहक के रूप में जमा करने पर अतिरिक्त $ _POST तत्व के रूप में पारित किया जाता है, इस प्रकार इसे सत्रों और / या कुकीज़ में संग्रहीत करने की आवश्यकता समाप्त हो जाती है, और कोई अतिरिक्त सर्वर भी नहीं होता है।
var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;
कहते हैं कि सर्वर के tzo
रूप में प्राप्त करता है $_POST['tzo']
;
$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);
सम्मिलित करें / अद्यतन date_created=$user_timestamp
।
Date_created प्राप्त करते समय, आप टाइमस्टैम्प को इस तरह परिवर्तित कर सकते हैं:
$date_created = // Get from the database
$created = date("F j, Y, g:i a",$date_created); // Return it to the user or whatever
अब, यह उदाहरण किसी की ज़रूरतों के अनुसार फिट हो सकता है, जब यह एक डालने की बात आती है first
टाइमस्टैम्प ... जब यह एक अतिरिक्त टाइमस्टैम्प, या टेबल की बात आती है, तो आप भविष्य के संदर्भ के लिए उपयोगकर्ता तालिका में tzo मान डालने, या इसे सेट करने पर विचार करना चाह सकते हैं। सत्र के रूप में या कुकी के रूप में।
अगर उपयोगकर्ता यात्रा करता है और टाइमज़ोन स्विच करता है तो PS BUT क्या है। GMT + 4 में लॉग करता है, GMT-1 पर तेजी से यात्रा करता है और फिर से लॉग इन करता है। अंतिम लॉगिन भविष्य में होगा।
मुझे लगता है ... हम बहुत ज्यादा सोचते हैं।
आप इसे ग्राहक के साथ क्षण-समय पर कर सकते हैं और सर्वर पर मूल्य भेज सकते हैं; नमूना उपयोग:
> moment.tz.guess()
"America/Asuncion"
PHP में मान्य TZ डेटाबेस टाइमज़ोन नाम प्राप्त करना दो चरणों वाली प्रक्रिया है:
जावास्क्रिप्ट के साथ, समय के माध्यम से मिनटों में ऑफसेट करें getTimezoneOffset
। यह ऑफसेट सकारात्मक होगा यदि स्थानीय टाइमज़ोन यूटीसी के पीछे है और नकारात्मक है अगर यह आगे है। इसलिए आपको ऑफसेट में एक विपरीत चिन्ह जोड़ना होगा।
var timezone_offset_minutes = new Date().getTimezoneOffset();
timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;
इस ऑफसेट को PHP में पास करें।
PHP में इस ऑफसेट को टाइमज़ोन_ name_from_abbr फ़ंक्शन के साथ एक मान्य टाइमज़ोन नाम में परिवर्तित करें ।
// Just an example.
$timezone_offset_minutes = -360; // $_GET['timezone_offset_minutes']
// Convert minutes to seconds
$timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
// America/Chicago
echo $timezone_name;</code></pre>
मैंने इस पर एक ब्लॉग पोस्ट लिखा है: कैसे PHP में उपयोगकर्ता टाइमज़ोन का पता लगाने के लिए । इसमें एक डेमो भी है।
Intl.DateTimeFormat().resolvedOptions().timeZone
वेब सर्वर पर कॉल करने और भेजने के लिए एक सरल प्रक्रिया है । Ref: stackoverflow.com/questions/9772955/…
इसका उपयोग करने का एक सरल तरीका है:
new Date().getTimezoneOffset();
एक संभावित विकल्प Date
हेडर फ़ील्ड का उपयोग करना है , जिसे आरएफसी 7231 में परिभाषित किया गया है और यह टाइमज़ोन को शामिल करने वाला है। बेशक, यह गारंटी नहीं है कि मूल्य वास्तव में ग्राहक का समयक्षेत्र है, लेकिन यह एक सुविधाजनक शुरुआती बिंदु हो सकता है।
यहाँ है कि मैं यह कैसे करते हैं। यह उपयोगकर्ता के स्थानीय समयक्षेत्र में PHP डिफ़ॉल्ट टाइमज़ोन सेट करेगा। बस अपने सभी पृष्ठों के शीर्ष पर निम्नलिखित चिपकाएँ:
<?php
session_start();
if(!isset($_SESSION['timezone']))
{
if(!isset($_REQUEST['offset']))
{
?>
<script>
var d = new Date()
var offset= -d.getTimezoneOffset()/60;
location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
</script>
<?php
}
else
{
$zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
$index = array_keys($zonelist, $_REQUEST['offset']);
$_SESSION['timezone'] = $index[0];
}
}
date_default_timezone_set($_SESSION['timezone']);
//rest of your code goes here
?>