2013-08-02 11 views
6

की तुलना करें मुझे जावास्क्रिप्ट लिखने की ज़रूरत है जो मुझे दो आईएसओ टाइमस्टैम्प की तुलना करने की अनुमति देगी और फिर उनके बीच अंतर मुद्रित करेगी, उदाहरण के लिए: "32 सेकंड"।2 आईएसओ 8601 टाइमस्टैम्प और आउटपुट सेकंड/मिनट अंतर

नीचे स्टैक ओवरफ़्लो पर मिले एक फ़ंक्शन है, यह एक सामान्य दिनांक को एक आईएसओ स्वरूपित में बदल देता है। तो, आईएसओ प्रारूप में वर्तमान समय प्राप्त करने के तरीके से यह पहली बात है।

अगली चीज़ मुझे करने की ज़रूरत है, इसकी तुलना करने के लिए एक और आईएसओ टाइमस्टैम्प प्राप्त करें, ठीक है, मेरे पास किसी ऑब्जेक्ट में संग्रहीत है। इसे इस तरह से पहुंचा जा सकता है: marker.timestamp (जैसा कि नीचे दिए गए कोड में दिखाया गया है)। अब मुझे उन दो दो टाइमस्टैम्प की तुलना करने और उनके बीच के अंतर को काम करने की आवश्यकता है। यदि यह < 60 सेकंड है, तो इसे सेकेंड में आउटपुट करना चाहिए, अगर यह 60 सेकंड है, तो इसे उदाहरण के लिए 1 मिनट और 12 सेकंड पहले आउटपुट करना चाहिए।

धन्यवाद!

function ISODateString(d){ 
function pad(n){return n<10 ? '0'+n : n} 
return d.getUTCFullYear()+'-' 
     + pad(d.getUTCMonth()+1)+'-' 
     + pad(d.getUTCDate())+'T' 
     + pad(d.getUTCHours())+':' 
     + pad(d.getUTCMinutes())+':' 
     + pad(d.getUTCSeconds())+'Z'} 

var date = new Date(); 
var currentISODateTime = ISODateString(date); 
var ISODateTimeToCompareWith = marker.timestamp; 

// Now how do I compare them? 
+0

तो आप 'ISISATETimeToCompareWith' के साथ' currentISODateTime' की तुलना करना चाहते हैं और वे दोनों आईएसओ 8601 प्रारूप में हैं? – federicot

+0

@Campari हां, ठीक है, तो उनके बीच अंतर आउटपुट। वे दोनों आईएसओ 8601 प्रारूप में हैं। – jskidd3

उत्तर

17

दो तिथियों की तुलना में सरल

रूप
var differenceInMs = dateNewer - dateOlder; 

तो है, timestamps में वापस परिवर्तित दिनांक उदाहरणों

var d1 = new Date('2013-08-02T10:09:08Z'), // 10:09 to 
    d2 = new Date('2013-08-02T10:20:08Z'); // 10:20 is 11 mins 

अंतर जाओ

var diff = d2 - d1; 

स्वरूप इस रूप में वांछित

if (diff > 60e3) console.log(
    Math.floor(diff/60e3), 'minutes ago' 
); 
else console.log(
    Math.floor(diff/1e3), 'seconds ago' 
); 
// 11 minutes ago 
+0

धन्यवाद। संख्याओं के बाद 'ई 3' बिट का क्या अर्थ है? – jskidd3

+4

ओह, मैं देखता हूं, मैं इसे लेता हूं यह 60k के लिए सिर्फ एक शॉर्टकट था। : पी – jskidd3

1

मैं बस अपनी वस्तु को अपने आईएसओडीएट वर्ग के हिस्से के रूप में संग्रहीत करता हूं। toString विधि में कहें, आप इसे प्रदर्शित करने की आवश्यकता होने पर स्ट्रिंग रूपांतरण कर सकते हैं। इस तरह आप सिर्फ दिनांक वर्ग के साथ बहुत ही सरल तर्क का उपयोग कर सकते दो ISODates के बीच अंतर निर्धारित करने के लिए:

var difference = ISODate.date - ISODateToCompare.date; 
if (difference > 60000) { 
    // display minutes and seconds 
} else { 
    // display seconds 
} 
1

मैं दोनों टाइम स्टांप से सेकंड में समय हो रही है, इस तरह की सलाह देते हैं:

var firstDate = new Date(currentISODateTime), 
    secondDate = new Date(ISODateTimeToCompareWith), 
    firstDateInSeconds = firstDate.getTime() * 1000, 
    secondDateInSeconds = secondDate.getTime() * 1000, 
    difference = Math.abs(firstDateInSeconds - secondDateInSeconds); 

और फिर difference साथ काम करना। उदाहरण के लिए:

if (difference < 60) { 
    alert(difference + ' seconds'); 
} else if (difference < 3600) { 
    alert(Math.floor(difference/60) + ' minutes'); 
} else { 
    alert(Math.floor(difference/3600) + ' hours'); 
} 

महत्वपूर्ण: मैं Math.abs इस्तेमाल किया सेकंड में तिथियों की तुलना करने के लिए उन दोनों के बीच पूर्ण अंतर प्राप्त करने के लिए, पहले हो, जो कुछ भी हो।

+0

मैंने पाया कि आपको '(नई तिथि (आईएसओ)) को विभाजित करना चाहिए। सेकंड में मान प्राप्त करने के लिए 1000 से गुणा करने के बजाय getTime() '1000 तक। – eskimwier

संबंधित मुद्दे