क्षण के लिए UTC का उपयोग करके तिथि बदलें। js


95

शायद और इसके लिए आसान जवाब है, लेकिन मुझे मिलकॉन्ड्स में यूटीसी की तारीख वापस करने के लिए क्षण पाने के लिए कोई रास्ता नहीं मिल रहा है। यहाँ मैं क्या कर रहा हूँ:

var date = $("#txt-date").val(),
    expires = moment.utc(date);

कोई आइडिया है कि मैं क्या गलत कर रहा हूँ?

जवाबों:


101

यह प्रलेखन में पाया जाता है । क्षण जैसी लाइब्रेरी के साथ, मैं आपसे प्रलेखन की संपूर्णता को पढ़ने का आग्रह करता हूं। यह वास्तव में महत्वपूर्ण है।

यह मानते हुए कि इनपुट पाठ उपयोगकर्ताओं के स्थानीय समय के अनुसार दर्ज किया गया है:

 var expires = moment(date).valueOf();

यदि उपयोगकर्ता को निर्देश दिया जाता है कि वह वास्तव में UTC तारीख / समय दर्ज करे, तो:

 var expires = moment.utc(date).valueOf();

22
संपादित - हटाया गया "आसानी से"। :)
मैट जॉनसन-पिंट

6
और अगर मेरे पास पहले से ही एक समय-समय के साथ समय-समय है, तो मैं इसे यूटीसी में कैसे बदल सकता हूं?
ア ッ ク ア

@ अलेक्सेंडर -.utc()
मैट जॉनसन-पिंट

2
यह काम नहीं करता है। यह केवल तारीख पर उपयोग किए जाने वाले तरीकों को बदलता है, तारीख को ही नहीं।
कोलेन

2
@ कोलीन - हाँ, लेकिन एक आमतौर पर उन तरीकों में से एक को कॉल करेगा, जैसे कि .format(), जो यूटीसी मूल्य का उत्सर्जन करेगा। यह आंतरिक दिनांक मान को स्वयं नहीं बदल सकता , क्योंकि Dateयह पहले से ही UTC टाइमस्टैम्प को ट्रैक कर रहा है। यह हमेशा केवल उन तरीकों को कहा जाता है जो यह निर्धारित करता है कि यूटीसी या स्थानीय समय का उत्सर्जन करना है या नहीं। उस संबंध में क्षण समान है।
मैट जॉनसन-पिंट

53

मैं इस विधि का उपयोग करता हूं और यह काम करता है। ValueOf मेरे लिए काम नहीं करता है।

moment.utc(yourDate).format()

2
यह प्रलेखन के अनुसार काम करता है। स्थानीय समय को यूटीसी में परिवर्तित करता है।
किशोर पवार

1
यहाँ कुछ गड़बड़ है। मैं moment.js ver का उपयोग कर रहा हूं। २.१ 2..१ और अगर d योरडेट ’-14 2017-10-14T21: 00: 00Z’ (en-us) के लिए है, तो उपरोक्त स्निपेट ठीक उसी परिणाम को लौटाता है -10 2017-10-14T21: 00: 00Z ’जो स्पष्ट रूप से नहीं है utc चूंकि मैं gmt + 3 में हूं। सही परिणाम '2017-10-15T00: 00: 00 + 03: 00' होगा और आपको यह 'क्षण (आपका)) .फॉर्मैट ()' के माध्यम से मिलेगा।
XDS

14

के रूप में : moment.js version 2.24.0

मान लें कि आपके पास एक स्थानीय दिनांक इनपुट है, यह आपकी डेटटाइम या समय इनपुट को यूटीसी में बदलने का उचित तरीका है :

var utcStart = new moment("09:00", "HH:mm").utc();

या यदि आप एक तारीख निर्दिष्ट करते हैं

var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();

जैसा कि आप देख सकते हैं कि परिणाम आउटपुट यूटीसी में वापस आ जाएगा:

//You can call the format() that will return your UTC date in a string 
 utcStart.format(); 
//Result : 2019-06-24T13:00:00 

लेकिन अगर आप इसे नीचे के रूप में करते हैं, तो यह यूटीसी में परिवर्तित नहीं होगा :

var myTime = new moment.utc("09:00", "HH:mm"); 

आप केवल यूटीसी समय के लिए अपना इनपुट सेट कर रहे हैं, ऐसा लगता है जैसे आपका उल्लेख है कि मायटाइम यूटीसी में है, .... आउटपुट 9:00 होगा


3
moment.utc(date).format(...); 

जाने का रास्ता है, जब से

moment().utc(date).format(...);

अजीब व्यवहार करता है ...


1
क्या आप इसके अजीब व्यवहार के बारे में बता सकते हैं moment().utc(date).format(...)?
फ्रीमैन लैंबडा

2
व्यवहार अजीब नहीं है, वे अलग-अलग तरीके हैं। पहले moment.utc(date)के लिए है पार्स करनेdate । दूसरा वर्तमान समय ( ) में हेरफेर करने के moment().utc(date)लिए है और पैरामीटर बेकार है क्योंकि इस मामले में कोई भी पैरामेट्स की उम्मीद नहीं करता है। moment()date.utc()
कोडिंग जींस

2

इसने मेरे लिए काम किया। दूसरों को यह उपयोगी लग सकता है।

// तारीख = 2020-08-31T00: 00: 00Z मैं डेनमार्क में स्थित हूं (समय क्षेत्र +2 घंटे है)

moment.utc (पल (दिनांक) .utc) ()) प्रारूप () // रिटर्न 2020-08-30T22: 00: 00Z


1

यदि बाकी सभी विफल हो जाते हैं, तो बस अपने स्थानीय ऑफसेट के व्युत्क्रम के साथ फिर से संगठित करें।

var timestamp = new Date();
var inverseOffset = moment(timestamp).utcOffset() * -1;
timestamp = moment().utcOffset( inverseOffset  );

timestamp.toISOString(); // This should give you the accurate UTC equivalent.

यह काम नहीं करता है। क्या काम करता है keepOffsetपैरामीटर को सही करने के लिए, जैसे कि moment(timestamp).toISOString(true),
क्रिस हैन्स

1

यहाँ, मैं दिनांक ऑब्जेक्ट पास कर रहा हूँ और इसे UTC समय में परिवर्तित कर रहा हूँ।

$.fn.convertTimeToUTC = function (convertTime) {
   if($(this).isObject(convertTime)) {
        return moment.tz(convertTime.format("Y-MM-DD HH:mm:ss"), moment.tz.guess()).utc().format("Y-MM-DD HH:mm:ss");
    }
};
// Returns if a value is an object
$.fn.isObject =  function(value) {
    return value && typeof value === 'object';
};


//you can call it as below
$(this).convertTimeToUTC(date);

1

इसका उत्तर होगा:

moment.utc(moment(localdate)).format()
localdate = '2020-01-01 12:00:00'

moment(localdate)
//Moment<2020-01-01T12:00:00+08:00>

moment.utc(moment(localdate)).format()
//2020-01-01T04:00:00Z

0

क्षण के इस प्रलेखन को पढ़ें । यहाँ हैं । उदाहरण और आउटपुट नीचे देखें जहां मैं GMT समय को स्थानीय समय में परिवर्तित करता हूं (मेरा क्षेत्र IST है) और फिर मैं स्थानीय समय को GMT में परिवर्तित करता हूं।

// convert GMT to local time
console.log('Server time:' + data[i].locationServerTime)
let serv_utc = moment.utc(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment(serv_utc,"YYYY-MM-DD HH:mm:ss").tz(self.zone_name).format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to local time:' + data[i].locationServerTime)

// convert local time to GMT
console.log('local time:' + data[i].locationServerTime)
let serv_utc = moment(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment.utc(serv_utc,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to server time:' + data[i].locationServerTime)

आउटपुट है

Server time:2019-12-19 09:28:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to local time:2019-12-19 14:58:13
local time:2019-12-19 14:58:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to server time:2019-12-19 09:28:13

-1

तुलना करने और फिर मिलीसेकंड प्राप्त करने के लिए आपको किसी चीज़ की आवश्यकता नहीं है?

उदाहरण के लिए:

let enteredDate = $("#txt-date").val(); // get the date entered in the input
let expires = moment.utc(enteredDate); // convert it into UTC

इसके साथ आपके पास UTC में समाप्ति की तारीख है। अब आप UTC में "अभी-अभी" तिथि प्राप्त कर सकते हैं और तुलना कर सकते हैं:

var rightNowUTC = moment.utc(); // get this moment in UTC based on browser
let duration = moment.duration(rightNowUTC.diff(expires)); // get the diff
let remainingTimeInMls = duration.asMilliseconds();

moment.valueOf()और (new Date()).getTime()दोनों वापसी मिलीसेकेंड के बाद से 1 जनवरी 1970 यूटीसी (यह एक मानक है)
Drenai
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.