मुझे पता है कि यह थोड़ा देर से है, लेकिन यहाँ समाधान के लिए मुझे तारीखों को संभालने के लिए आना होगा जब आप समय-सीमा को स्वतंत्र करना चाहते हैं। अनिवार्य रूप से इसमें यूटीसी को सब कुछ परिवर्तित करना शामिल है।
जावास्क्रिप्ट से सर्वर तक :
हटाए गए समयक्षेत्र ऑफसेट के साथ युगों के मूल्यों के रूप में तारीखें भेजें।
var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
url: '/target',
params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});
सर्वर तब दिनांक युग के रूप में 1420070400000 प्राप्त करता है।
सर्वर साइड पर, उस युग मान को एक डेटाइम ऑब्जेक्ट में कनवर्ट करें:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
इस बिंदु पर तारीख उपयोगकर्ता द्वारा प्रदान की गई तारीख / समय है क्योंकि उन्होंने इसे प्रदान किया है। प्रभावी रूप से यह यूटीसी है।
दूसरे रास्ते पर जा रहे हैं :
जब सर्वर डेटाबेस से डेटा खींचता है, संभवतः यूटीसी में, एक युग के रूप में अंतर प्राप्त करें (यह सुनिश्चित करें कि दोनों दिनांक ऑब्जेक्ट स्थानीय या यूटीसी हैं):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
या
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
जब जावास्क्रिप्ट इस मान को प्राप्त करता है, तो एक नई तिथि ऑब्जेक्ट बनाएं। हालाँकि, यह दिनांक ऑब्जेक्ट स्थानीय समय माना जा रहा है, इसलिए आपको इसे वर्तमान समय क्षेत्र द्वारा ऑफसेट करने की आवश्यकता है:
var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))
console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)
जहां तक मुझे पता है, यह किसी भी समय क्षेत्र के लिए काम करना चाहिए जहां आपको उन तिथियों को प्रदर्शित करने की आवश्यकता होती है जो टाइमज़ोन स्वतंत्र हैं।