दो तिथियों के बीच कितने सेकंड हैं?


180

इसलिए मेरे पास दो तारीखें हैं YYYY-MM-DDऔरZZZZ-NN-EE

मैं कैसे पता लगा सकता हूं कि उनके बीच कितने सेकंड हैं?


173
मैं पकड़े जाने से रोकने के लिए तारीखों के बीच कम से कम आधे घंटे की कोशिश करता हूं।
डॉन ब्रैनसन

yyyy-MM-ddस्पष्ट है (वर्ष, माह, दिन-दिन कि वे सभी बड़े नहीं हैं), लेकिन ZZZZ-NN-EE ऐसा नहीं है। मैं इसकी व्याख्या करता हूं (समयक्षेत्र,,, दिन-प्रति-सप्ताह)। क्या यह सप्ताह-दर-साल है? यदि हां, तो ऐसा ही होता ww। लेकिन फिर भी हमें अंतर की गणना करने के लिए वर्ष की आवश्यकता है। क्या आप वास्तविक नमूने के कुछ मूल्य दे सकते हैं?
बालुसक

7
@ बाल्स्क: मेरा मानना ​​है कि वह सिर्फ दूसरी तारीख (वाई -> जेड, एम -> एन, और डी -> ई) को दर्शाने के लिए अगले पत्रों में गया। शुरुआत और अंत के रूप में चर नाम का उपयोग करना शायद बेहतर होता।
ऑस्टिन सलोनन

ओह समझा। यह वास्तव में बहुत स्पष्ट कहा जा सकता था।
बालुसक Bal

जवाबों:


242

मैं पूर्णांक मानों के लिए YYYY & ZZZZ ले रहा हूं जिसका अर्थ है कि वर्ष, MM और NN का अर्थ पूर्णांक मान से है जिसका अर्थ है वर्ष का महीना और DD & EE पूर्णांक मान का अर्थ है महीने का दिन।

var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0);
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0);
var dif = t1.getTime() - t2.getTime();

var Seconds_from_T1_to_T2 = dif / 1000;
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);

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

वैकल्पिक रूप से, यदि आपकी तिथियां एक प्रारूप में आती हैं तो जावास्क्रिप्ट पार्स कर सकता है

var dif = Date.parse(MM + " " + DD + ", " + YYYY) - Date.parse(NN + " " + EE + ", " + ZZZZ);

और फिर आप उस मूल्य को मिलीसेकंड में अंतर के रूप में उपयोग कर सकते हैं (मेरे दोनों उदाहरणों में अंतर का एक ही अर्थ है)


1
केवल उदाहरण में उपयोग किए गए पैटर्न ही सही नहीं हैं। 4-अंक वर्षों को लोअरकेस द्वारा yyyy, 2-अंकीय महीनों को अपरकेस द्वारा MMऔर 2-अंकीय दिनों को लोअरकेस द्वारा नोट किया जाता है dd
बालुसक Bal

1
मार्टिन, मुझे इस बात का आभास है कि यहां कोई तारीख पैटर्न का उपयोग नहीं किया गया था। MM DD, YYYY और NN EE, ZZZZ वास्तव में "उदाहरण मूल्य" हैं जो स्टीवन ने पूछे थे। इसलिए दूसरे शब्दों में, वह किसी भी प्रकार का प्रारूपण नहीं कर रहा है।
वैगनर सिलवीरा

मैंने दूसरा उदाहरण अपडेट किया है, जो मुझे लगता है कि हर कोई उलझन में था। मैंने यह भी स्पष्ट किया है कि कैसे मैं उनके उदाहरण में दिए गए मूल्यों की व्याख्या कर रहा हूँ।
मार्टिन

आपके दूसरे चर को बुलाया जाना चाहिए t2
कीस सी। बक्कर

ज्यादातर मामलों में आप शायद t2 - t1 कर रहे होंगे, t1 - t2
UpTheCreek

83

बस घटाव:

var a = new Date();
alert("Wait a few seconds, then click OK");

var b = new Date();
var difference = (b - a) / 1000;

alert("You waited: " + difference + " seconds");

@ user3344977 - तब कुछ अजीब चल रहा है! के मूल्यों की जाँच करें aऔर bसुनिश्चित करें कि वे तिथियां हैं।
सेठ

@ सेठ आप सही हैं इसलिए मैंने अपनी टिप्पणी हटा दी .. मेरी "तारीखों" में से एक वास्तव में एक स्ट्रिंग थी। यह पूरी तरह से काम करता है।
user3344977

14

यदि आपकी एक या दोनों तिथियां भविष्य में हैं, तो मुझे डर है कि आप एसओएल हैं यदि आप दूसरी सटीकता चाहते हैं। UTC का समय लीप सेकंड है जो कि होने से लगभग 6 महीने पहले तक ज्ञात नहीं है, इसलिए इससे आगे की कोई भी तारीख कुछ सेकंडों में गलत हो सकती है (और व्यवहार में, जब से लोग अपनी मशीनों को अपडेट नहीं करते हैं, अक्सर, आप भविष्य में किसी भी समय कुछ सेकंड से बंद हो सकता है)।

यह तारीख / समय पुस्तकालयों को डिजाइन करने के सिद्धांत का एक अच्छा विवरण देता है और ऐसा क्यों है: http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date/time.tradeoffs


7
लीप के दूसरे अंक का उल्लेख करने के लिए +1! यह बहुत निराशाजनक है जब यह गलत तरीके से हो जाता है, यहां तक ​​कि उन लोगों द्वारा भी जिन्हें बेहतर पता होना चाहिए (POSIX समिति, मैं आपको देख रहा हूं ...)
जिम लुईस

1
यह उल्लेख करते हुए कि ECMA मानक स्पष्ट रूप से लीप सेकंड (यानी: यहां तक ​​कि पिछले लीप सेकंड) को अनदेखा करता है : समय मानों में लीप सेकंड को अनदेखा किया जाता है। यह माना जाता है कि प्रति दिन 86,400,000 मिलीसेकंड होते हैं
सिल्वेन लेरॉक्स

11

आप इसे बस कर सकते हैं।

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime()) / 1000);



0

आसान तरीका:

function diff_hours(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60 * 60);
  return Math.abs(Math.round(diff));

 }


function diff_minutes(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60);
  return Math.abs(Math.round(diff));

 }

function diff_seconds(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  return Math.abs(Math.round(diff));

 }

function diff_miliseconds(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime());
  return Math.abs(Math.round(diff));

 }


dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));


dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 14, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));

console.log(diff_minutes(dt1, dt2));

console.log(diff_seconds(dt1, dt2));

console.log(diff_miliseconds(dt1, dt2));

-3

बैश में:

bc <<< "$(date --date='1 week ago' +%s) - \
    $(date --date='Sun,  29 Feb 2004 16:21:42 -0800' +%s)"

इसमें बीसी और ग्नू डेट स्थापित होने की आवश्यकता होती है।


1
यह कैसे प्रासंगिक है?
ड्रॉपआउट

-10

.Net आपके लिए गणित करने के लिए TimeSpan वर्ग प्रदान करता है।

var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0)
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0)

Dim ts As TimeSpan = time2.Subtract(time1)

ts.TotalSeconds

@ ठीक है, आप इस उत्तर को हटाना चाहते हैं ताकि आप अंक न खोएं। उन्होंने विज़ुअल बेसिक सोर्स कोड के बजाय जावास्क्रिप्ट स्रोत कोड के लिए कहा।
मैकगीवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.