एक अवधि को एक पल में जोड़ें (क्षण.js)


149

क्षण संस्करण: 2.0.0

डॉक्स पढ़ने के बाद , मैंने सोचा कि यह सीधा-आगे (क्रोम कंसोल) होगा:

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = startdate.add(moment.duration(2, 'hours'));
returned_endate == expected_enddate  // false
returned_endate  // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

यह एक तुच्छ उदाहरण है, लेकिन मैं इसे काम करने के लिए भी नहीं कर सकता। मुझे ऐसा लग रहा है कि मुझे यहाँ कुछ याद आ रहा है, लेकिन मुझे वास्तव में यह पसंद नहीं है। यहां तक ​​कि यह काम नहीं करता है:

startdate.add(2, 'hours')
    // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

कोई भी सहायताकाफी प्रशंसनीय होगी।

संपादित करें: मेरा अंतिम लक्ष्य एक द्विआधारी स्थिति चार्ट बनाना है जैसे मैं यहां काम कर रहा हूं: http://bl.ocks.org/phobson/5872894

जैसा कि आप देख सकते हैं, मैं वर्तमान में इस मुद्दे के माध्यम से काम करते समय डमी एक्स-मानों का उपयोग कर रहा हूं।

जवाबों:


264

मुझे लगता है कि आपने प्रलेखन के लिए एक महत्वपूर्ण बिंदु को याद किया .add()

समय जोड़कर मूल क्षण को म्यूट करता है।

आप इसे एक फ़ंक्शन के रूप में मानते हैं जो अपरिवर्तनीय परिणाम देता है। बनाने में आसान गलती। :)

यदि आप रिटर्न वैल्यू का उपयोग करते हैं, तो यह उसी वास्तविक वस्तु के रूप में है, जिसे आपने शुरू किया था। यह सिर्फ विधि के लिए एक सुविधा के रूप में लौट रहा है।

आप इस व्यवहार के चारों ओर काम कर सकते हैं पल पल क्लोनिंग के रूप में , यहाँ वर्णित है

इसके अलावा, आप केवल ==परीक्षण करने के लिए उपयोग नहीं कर सकते । आप प्रत्येक क्षण को उसी आउटपुट पर प्रारूपित कर सकते हैं और उन की तुलना कर सकते हैं, या आप केवल .isSame()विधि का उपयोग कर सकते हैं ।

अब आपका कोड है:

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = moment(startdate).add(2, 'hours');  // see the cloning?
returned_endate.isSame(expected_enddate)  // true

मैं वास्तव में प्रतिक्रिया की सराहना करता हूं, मैट। इससे कई चीजें साफ हो जाती हैं। यहाँ वह है जो मैं अभी भी अपने सिर के चारों ओर नहीं कर सकता हूं: इसका हर प्रतिनिधित्व returned_endateमुझे पता है कि कैसे पहुंचना अभी भी आधी रात में है, और 2 बजे तक नहीं। मुझे इसे 2am करने की आवश्यकता है ताकि मैं एक डी 3 चार्ट बना सकूं जो मैं काम कर रहा हूं (संपादित प्रश्न देखें)। एक बार फिर धन्यवाद।
पॉल एच।

14
सुनिश्चित करें कि आप प्रदर्शन विधियों में से किसी एक को कॉल करते हैं, जैसे कि .format()या .toDate()या .unix()। बस कच्चे पल को देखने से अच्छा काम नहीं होने वाला है। तुम भी yourmoment.utc().format()स्थानीय समय के बजाय utc के रूप में स्वरूपित करने के लिए कुछ करना चाहते हो सकता है ।
मैट जॉनसन-पिंट

3
हाँ, यह भूल जाते हैं कि ये क्षण अपरिवर्तनीय नहीं हैं, हर एक बार थोड़ी देर में फिर से मिल जाता है। अच्छा!
वेलबेरियो

30

मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें हम लाइव रूट ट्रैक करते हैं। यात्री अपने स्थान पर पहुँचने के लिए ड्राइवर की वर्तमान स्थिति और अपेक्षित आगमन समय दिखाना चाहता है। इसलिए मुझे वर्तमान समय में कुछ अवधि जोड़ने की आवश्यकता है।

तो मैंने ऐसा करने के लिए नीचे वर्णित तरीका पाया। हम अपने वर्तमान समय में किसी भी अवधि (घंटे, मिनट और सेकंड) को जोड़ सकते हैं:

var travelTime = moment().add(642, 'seconds').format('hh:mm A');// it will add 642 seconds in the current time and will give time in 03:35 PM format

var travelTime = moment().add(11, 'minutes').format('hh:mm A');// it will add 11 mins in the current time and will give time in 03:35 PM format; can use m or minutes 

var travelTime = moment().add(2, 'hours').format('hh:mm A');// it will add 2 hours in the current time and will give time in 03:35 PM format

यह मेरी आवश्यकता को पूरा करता है। हो सकता है यह आपकी मदद कर सकता है।


9
यह 'मिनट ’होना चाहिए न कि' मिनट’ में।
तन्वी अग्रवाल

2
यह 'मिनट ’होना चाहिए न कि be मिनट’। या कम से कम यह 'म' हो सकता है। कृपया अपना उत्तर अपडेट करें!
उलरिच डोहो

1
यह मेरे उत्तर में पहले से ही 'मिनट' है और मैंने पहले ही उल्लेख किया है कि हम 'मिनट' के बजाय 'मी' का उपयोग कर सकते हैं (उत्तर की टिप्पणियाँ देखें)। मुझे लगता है कि मुझे अपने उत्तर को अपडेट करने की कोई आवश्यकता नहीं है।
महिमा अग्रवाल

6

लोगों के लिए startTime(जैसे 12h: 30: 30) और a duration(मिनट में मान 120 की तरह), आप इस endTimeतरह अनुमान लगा सकते हैं :

const startTime = '12:30:00';
const durationInMinutes = '120';

const endTime = moment(startTime, 'HH:mm:ss').add(durationInMinutes, 'minutes').format('HH:mm');

// endTime is equal to "14:30"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.