जवाबों:
UTC तारीख से शुरू करने के लिए सबसे मूर्खतापूर्ण तरीका लगता है कि एक नई Date
वस्तु बनाना है और setUTC…
इसे उस तिथि / समय पर सेट करने के तरीकों का उपयोग करना है जिसे आप चाहते हैं।
फिर विभिन्न toLocale…String
तरीके स्थानीय आउटपुट प्रदान करेंगे।
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
फ़ंक्शन में उपयोगकर्ता के स्थान को ध्यान में नहीं रखता है ।
यह प्रश्न बहुत पुराना है, इसलिए उस समय क्षणों का अस्तित्व नहीं था, लेकिन नई परियोजनाओं के लिए, यह इस तरह के कार्यों को बहुत सरल करता है।
यूटीसी से अपनी तिथि स्ट्रिंग को पार्स करना सबसे अच्छा है (अपने ब्राउज़र पर लगातार परिणाम प्राप्त करने के लिए सर्वर पर ISO-8601 संगत स्ट्रिंग बनाएं ):
var m = moment("2013-02-08T09:30:26Z");
अब बस m
अपने अनुप्रयोग में उपयोग करें, प्रदर्शन के संचालन के लिए स्थानीय समयक्षेत्र में क्षणों की चूक। दिनांक और समय मानों को प्रारूपित करने या इसके अंश निकालने के कई तरीके हैं ।
तुम भी इस तरह से उपयोगकर्ताओं को एक पल वस्तु प्रारूप कर सकते हैं:
m.format('LLL') // Returns "February 8 2013 8:30 AM" on en-us
एक अलग समय क्षेत्र (जैसे कि न तो स्थानीय एक और न ही यूटीसी) में एक क्षण.जेएस ऑब्जेक्ट को बदलने के लिए, आपको क्षण की आवश्यकता होगी । समय सारणी विस्तार । उस पृष्ठ के भी कुछ उदाहरण हैं, यह उपयोग करने के लिए बहुत सरल है।
For old projects, just use jQuery
आप new Date().getTimezoneOffset()/60
समयक्षेत्र के लिए उपयोग कर सकते हैं । toLocaleString()
उपयोगकर्ता के स्थान का उपयोग करते हुए एक तिथि प्रदर्शित करने के लिए एक विधि भी है ।
यहाँ पूरी सूची है: डेट्स के साथ काम करना
toLocaleString
?
एक बार जब आप अपनी तिथि का निर्माण कर लेते हैं, तो यहां रूपांतरण के लिए एक स्निपेट है:
फ़ंक्शन एक UTC स्वरूपित दिनांक ऑब्जेक्ट और स्वरूप स्ट्रिंग लेता है।
आपको एक Date.strftime
प्रोटोटाइप की आवश्यकता होगी ।
function UTCToLocalTimeString(d, format) {
if (timeOffsetInHours == null) {
timeOffsetInHours = (new Date().getTimezoneOffset()/60) * (-1);
}
d.setHours(d.getHours() + timeOffsetInHours);
return d.strftime(format);
}
getTimezoneOffset()/60
एक अंश लौटा सकता है (उदाहरण के लिए +05: 30 की भारत ऑफसेट 5.5)। दशमलवों को काट दिया जाता है। अन्यथा, घंटे सेट करने से अन्य मान अपडेट होते हैं (घंटे 48 से सेट होते हैं और देखते हैं कि क्या होता है)।
जेएस में स्थानीय संपत्ति समय को प्रारूपित करने के लिए कोई सरल और क्रॉस प्लेटफॉर्म तरीके नहीं हैं, प्रत्येक संपत्ति को ऊपर बताए अनुसार परिवर्तित करना।
यहां एक त्वरित हैक है जिसका उपयोग मैं स्थानीय YYYY-MM-DD प्राप्त करने के लिए करता हूं। ध्यान दें कि यह एक हैक है, क्योंकि अंतिम तिथि में अब सही समय क्षेत्र नहीं होगा (इसलिए आपको समय-सीमा को अनदेखा करना होगा)। अगर मुझे कुछ और चाहिए, तो मैं क्षण भर में उपयोग करता हूं।
var d = new Date();
d = new Date(d.getTime() - d.getTimezoneOffset() * 60000)
var yyyymmdd = t.toISOString().slice(0,0);
// 2017-05-09T08:24:26.581Z (but this is not UTC)
D.getTimezoneOffset () मिनटों में समय क्षेत्र ऑफ़सेट लौटाता है, और d.getTime () एमएस में है, इसलिए x 60,000।
यहाँ मैं पिछले परियोजनाओं में इस्तेमाल किया है:
var myDate = new Date();
var tzo = (myDate.getTimezoneOffset()/60)*(-1);
//get server date value here, the parseInvariant is from MS Ajax, you would need to do something similar on your own
myDate = new Date.parseInvariant('<%=DataCurrentDate%>', 'yyyyMMdd hh:mm:ss');
myDate.setHours(myDate.getHours() + tzo);
//here you would have to get a handle to your span / div to set. again, I'm using MS Ajax's $get
var dateSpn = $get('dataDate');
dateSpn.innerHTML = myDate.localeFormat('F');
getTimezoneOffset()/60
अक्सर एक दशमलव मान वापस आ जाएगा। यह 1900 से पहले की तारीखों के लिए विशेष रूप से सच है, जहां कई स्थानों पर मिनट और सेकंड में ऑफसेट थे। इसके अलावा, जावास्क्रिप्ट तिथियों को अब ऐतिहासिक ऑफसेट का समर्थन करने की आवश्यकता है। जैसे 1890 में मास्को में ऑफसेट +2: 30: 17 था। देखें ब्राउज़र्स, समय क्षेत्र, क्रोम 67 त्रुटि ।
.getTimezoneOffset()
विधि समय क्षेत्र GMT / UTC समयज़ोन से मिनट, गिनती "पश्चिम" में ऑफसेट रिपोर्ट करती है, एक ऑफसेट मूल्य एक आम तौर पर करने के लिए अभ्यस्त है क्या करने के लिए नकारात्मक है कि हो जाती है। (उदाहरण, न्यूयॉर्क का समय +240 मिनट या +4 घंटे बताया जाएगा)
घंटों में सामान्य समय-क्षेत्र ऑफ़सेट प्राप्त करने के लिए, आपको उपयोग करने की आवश्यकता है:
var timeOffsetInHours = -(new Date()).getTimezoneOffset()/60
महत्वपूर्ण विवरण:
ध्यान दें कि दिन के समय की बचत का समय परिणाम में निहित होता है - इसलिए यह विधि आपको वास्तव में समय ऑफसेट देती है - वास्तविक भौगोलिक समय-क्षेत्र ऑफसेट नहीं।
PHP कोड से तारीख के साथ मैं कुछ इस तरह का इस्तेमाल किया ..
function getLocalDate(php_date) {
var dt = new Date(php_date);
var minutes = dt.getTimezoneOffset();
dt = new Date(dt.getTime() + minutes*60000);
return dt;
}
हम इसे इस तरह कह सकते हैं
var localdateObj = getLocalDate('2015-09-25T02:57:46');
मैं अब तक के उत्तरों को मिलाता हूं और इसे जोड़ता हूं, क्योंकि मुझे उन सभी को पढ़ना था और उपयोगकर्ता के स्थानीय समयक्षेत्र प्रारूप में db से दिनांक समय स्ट्रिंग प्रदर्शित करने के लिए कुछ समय के लिए अतिरिक्त जांच करना था।
डेटाइम स्ट्रिंग एक अजगर से आता है / प्रारूप में django db: 2016-12-05T15: 12: 12.2.2ZZ
जावास्क्रिप्ट में ब्राउज़र भाषा का विश्वसनीय पता लगाना सभी ब्राउज़रों में काम नहीं करता है ( ब्राउज़र भाषा की प्राथमिकता का पता लगाने के लिए जावास्क्रिप्ट देखें) ), इसलिए मुझे सर्वर से ब्राउज़र की भाषा मिलती है।
पायथन / Django: संदर्भ पैरामीटर के रूप में अनुरोध ब्राउज़र भाषा भेजें:
language = request.META.get('HTTP_ACCEPT_LANGUAGE')
return render(request, 'cssexy/index.html', { "language": language })
HTML: इसे एक छिपे हुए इनपुट में लिखें:
<input type="hidden" id="browserlanguage" value={{ language }}/>
जावास्क्रिप्ट: छिपे हुए इनपुट का मान प्राप्त करें, जैसे एन-जीबी, एन-यूएस; क्यू = 0.8, एन; क्यू = 0.6 / और फिर सूची में पहली भाषा को केवल प्रतिस्थापित और नियमित अभिव्यक्ति के माध्यम से लें।
const browserlanguage = document.getElementById("browserlanguage").value;
var defaultlang = browserlanguage.replace(/(\w{2}\-\w{2}),.*/, "$1");
जावास्क्रिप्ट: डेटाटाइम में कनवर्ट करें और इसे प्रारूपित करें:
var options = { hour: "2-digit", minute: "2-digit" };
var dt = (new Date(str)).toLocaleDateString(defaultlang, options);
परिणाम है (ब्राउज़र भाषा एन-जीबी है): 05/12/2016, 14:58
// new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]])
var serverDate = new Date(2018, 5, 30, 19, 13, 15); // just any date that comes from server
var serverDateStr = serverDate.toLocaleString("en-US", {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
})
var userDate = new Date(serverDateStr + " UTC");
var locale = window.navigator.userLanguage || window.navigator.language;
var clientDateStr = userDate.toLocaleString(locale, {
year: 'numeric',
month: 'numeric',
day: 'numeric'
});
var clientDateTimeStr = userDate.toLocaleString(locale, {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
});
console.log("Server UTC date: " + serverDateStr);
console.log("User's local date: " + clientDateStr);
console.log("User's local date&time: " + clientDateTimeStr);
options
मेरे मामले के लिए भाग की आवश्यकता है )
मेरे पास जो सबसे अच्छा समाधान आया है वह है [टाइम डिस्प्ले = "llll" डेटाइम = "UTC टाइम" /] टैग बनाना, और उपयोगकर्ता के समय के सापेक्ष पार्स करने के लिए जावास्क्रिप्ट (jquery) का उपयोग करना।
http://momentjs.com/ Moment.js
अच्छी तरह से समय प्रदर्शित करेगा।
दिनांक को स्थानीय दिनांक में परिवर्तित करने के लिए toLocaleDateString () विधि का उपयोग करें।
var date = (new Date(str)).toLocaleDateString(defaultlang, options);
स्थानीय समय का उपयोग करने के लिए समय बदलने के लिए toLocaleTimeString () विधि का उपयोग करें।
var time = (new Date(str)).toLocaleTimeString(defaultlang, options);
पता नहीं कैसे करना है, लेकिन जावास्क्रिप्ट क्लाइंट साइड टेक्नोलॉजी है।
usersLocalTime = new Date();
इसमें क्लाइंट का समय और तारीख होगी (जैसा कि उनके ब्राउज़र द्वारा रिपोर्ट किया गया है, और वे जिस कंप्यूटर पर बैठे हैं, उसे बढ़ाकर)। प्रतिक्रिया में सर्वर के समय को शामिल करने और अनुमान लगाने के लिए कुछ सरल गणित करने के लिए यह तुच्छ होना चाहिए।
toLocateDateString()
कुछ ऐसा दिखता है, जो 'रविवार, 12 जनवरी, 2014' जैसा दिखता है ..