मैं टाइपस्क्रिप्ट में 2 तिथियों के बीच के समय की गणना कैसे कर सकता हूं


138

यह जावास्क्रिप्ट में काम करता है

new Date()-new Date("2013-02-20T12:01:04.753Z")

लेकिन टाइपस्क्रिप्ट में मैं दो नए डेट्स को आराम नहीं दे सकता

Date("2013-02-20T12:01:04.753Z")

काम न करें क्योंकि paremater तिथि हस्ताक्षर से मेल नहीं खाता है

जवाबों:


152

1970-01-01 के बाद से कुल मिलीसेकंड में समय पाने के लिए getTimeविधि का उपयोग करें , और उन्हें घटाएं:

var time = new Date().getTime() - new Date("2013-02-20T12:01:04.753Z").getTime();

3
मुझे लगता है कि आप getTime () और valueOf () को मिला रहे हैं। डॉक्स के अनुसार, गेटटाइम () "मिलीसेकंड में समय मान प्राप्त करता है।" हालांकि यह मान है () जो "आधी रात के बाद से मिलीसेकंड में संग्रहीत समय मान लौटाता है, 1 जनवरी, 1970 यूटीसी।"
केन लियोन

दोनों ऐसा ही करते हैं:new Date(1970, 1, 1, 0, 0, 0, 0).valueOf() // returns 2674800000 new Date(1970, 1, 1, 0, 0, 0, 0).getTime() // returns 2674800000
प्रेपिक

MDK से @KenLyon getTime दस्तावेज़ीकरण: आप किसी अन्य दिनांक ऑब्जेक्ट को दिनांक और समय असाइन करने में मदद करने के लिए इस विधि का उपयोग कर सकते हैं। यह विधि कार्यात्मक रूप से valueOf () विधि के बराबर है।
फोनिक्स

29
एक टिप, उपयोग करने के बजाए new Date().getTime()उपयोग Date.now()ताकि आप नई वस्तुओं को अनावश्यक रूप से नहीं बनाते हैं।
फोनिक्स

1
@PhoneixS उनके समकक्ष होने के बारे में दिलचस्प। मुझे बताने के लिए धन्यवाद! इसके अलावा, यह नई वस्तुओं को बनाने से बचने के बारे में एक अच्छा सुझाव है।
केन लियोन

110

इस प्रकार इसे टाइपस्क्रिप्ट में किया जाना चाहिए:

(new Date()).valueOf() - (new Date("2013-02-20T12:01:04.753Z")).valueOf()

बेहतर पठनीयता:

      var eventStartTime = new Date(event.startTime);
      var eventEndTime = new Date(event.endTime);
      var duration = eventEndTime.valueOf() - eventStartTime.valueOf();

3
यह सबसे सही दृष्टिकोण है, क्योंकि वस्तुओं पर अंकगणित करते समय जावास्क्रिप्ट आंतरिक रूप से "valueOf" का उपयोग कर रहा है। टाइपस्क्रिप्ट को काफी चतुर होना चाहिए (दुर्भाग्यपूर्ण, यह अभी तक इसका समर्थन नहीं है) क्योंकि यह पहले से ही जानता है कि दिनांक के लिए मान विधि एक संख्या देता है जैसा कि lib.d.ts में परिभाषित है
Bigjim

1
दिलचस्प रूप से टाइपस्क्रिप्ट अब इतनी चालाक है कि भले ही आप परिभाषित न करें eventStartTimeऔर eventEndTimeयह अवधि एक के रूप में टाइप हो जाती है number(मतलब यदि आप कोड की तीसरी पंक्ति को यहां अपने आप लेते हैं तो अवधि एक संख्या होगी)
सिमोन_विवर

22

यह काम नहीं करता है क्योंकि Date - Dateठीक उसी तरह के प्रकार पर निर्भर करता है जिस प्रकार के प्रकार के टाइपस्क्रिप्ट को रोकने के लिए डिज़ाइन किया गया है।

+उपसर्ग का उपयोग करते हुए एक वर्कअराउंड है :

var t = Date.now() - +(new Date("2013-02-20T12:01:04.753Z");

या, यदि आप उपयोग नहीं करना पसंद करते हैं Date.now() :

var t = +(new Date()) - +(new Date("2013-02-20T12:01:04.753Z"));

चर्चा यहाँ देखें

या, सिद्धार्थ सिंह के जवाब को देखें, नीचे और अधिक सुरुचिपूर्ण समाधान का उपयोग करने के लिए valueOf()


1
लिंक संपादित करने को मंजूरी देना, क्योंकि कोडप्लेक्स के बंद होने के कारण, मूल चर्चा अब मौजूदा लिंक पर उपलब्ध नहीं है; जब तक web.archive.org का उपयोग करने के लिए कुछ कंबल आपत्ति नहीं है, यह मूल पोस्ट को किसी भी तरह से नुकसान या नुकसान नहीं पहुंचाता है, बल्कि इसके अर्थ को संरक्षित करता है।
जूड फिशर

11

+ऑपरेटर को रखने के लिए आपको अंतर की गणना करने के लिए ,

इस तरह typescriptसे दिनांक संख्याओं में परिवर्तित हो जाते हैं।

+new Date()- +new Date("2013-02-20T12:01:04.753Z")

वहां से आप अंतर को minutesया में बदलने के लिए एक सूत्र बना सकते हैं hours


3
// TypeScript

const today = new Date();
const firstDayOfYear = new Date(today.getFullYear(), 0, 1);

// Explicitly convert Date to Number
const pastDaysOfYear = ( Number(today) - Number(firstDayOfYear) );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.