2011-12-16 14 views
9

मैं 2 तिथियों के बीच अंतर की गणना कर रहा हूं जिसके लिए कई अलग-अलग उदाहरण उपलब्ध हैं। लौटाया गया समय मिलीसेकंड में है इसलिए मुझे इसे और अधिक उपयोगी में बदलने की जरूरत है। घंटे: मिनट: सेकंड या घंटे:जावास्क्रिप्ट शो मिलीसेकंड दिन के रूप में: घंटे: सेकंड के बिना मिनट

अधिकांश उदाहरण के लिए दिन हैं मिनट है, लेकिन मैं दिनों की आवश्यकता: घंटे: मिनट तो सेकंड मिनट में को गिरफ्तार किया जाना चाहिए।

जिस विधि का मैं वर्तमान में उपयोग कर रहा हूं वह करीब आता है लेकिन 3.3.00 दिखाए जाने पर 3 दिन 2.23.60 के रूप में दिखाता है, इसलिए कुछ सही नहीं है। जैसा कि मैंने वेब पर एक उदाहरण से वर्तमान कोड को पकड़ लिया है, मैं ऐसा करने के अन्य तरीकों के लिए सुझावों के लिए खुला हूं।

मैं एक अंतिम तिथि से एक आरंभ तिथि को घटाकर इस प्रकार से मिलीसेकेंड में समय प्राप्त करने के कर रहा हूँ: -: मिनट

date1 = new Date(startDateTime); 
date2 = new Date(endDateTime); 
ms = Math.abs(date1 - date2) 

मैं मूल रूप से एमएस चर लेने के लिए और days.hours में में बंद करना होगा।

+2

कुछ कोड साझा करने के लिए देखभाल? –

+0

लगता है जैसे "जिस विधि का आप वर्तमान में उपयोग कर रहे हैं" लगभग सही है! इसे ठीक क्यों नहीं करें? –

+0

क्या आप कुछ कर रहे हैं जो आप कर रहे हैं? यह निश्चित रूप से ऐसा लगता है कि आप इसे गलत कर रहे हैं। साथ ही, http://stackoverflow.com/questions/1056728/formatting-a-date-in-javascript – austinfromboston

उत्तर

17

कुछ इस तरह?

function dhm(t){ 
    var cd = 24 * 60 * 60 * 1000, 
     ch = 60 * 60 * 1000, 
     d = Math.floor(t/cd), 
     h = Math.floor((t - d * cd)/ch), 
     m = Math.round((t - d * cd - h * ch)/60000), 
     pad = function(n){ return n < 10 ? '0' + n : n; }; 
    if(m === 60){ 
    h++; 
    m = 0; 
    } 
    if(h === 24){ 
    d++; 
    h = 0; 
    } 
    return [d, pad(h), pad(m)].join(':'); 
} 

console.log(dhm(3 * 24 * 60 * 60 * 1000)); 
+1

बहुत धन्यवाद माइक, सभी उदाहरणों में से मैंने आपके कोड को विभिन्न मूल्यों को फेंकते समय सबसे विश्वसनीय पाया। बहुत सराहना की। – Mitch

1

"लौटाया गया समय मिलीसेकंड में है इसलिए मुझे इसे और अधिक उपयोगी में बदलने की जरूरत है।"

क्या आप किसी सर्वर से वापस समय प्राप्त कर रहे हैं या यह शुद्ध जावास्क्रिप्ट है?

कुछ कोड वास्तव में सहायता होगी। "कुछ उपयोगी" अस्पष्ट तरह का है।

यहां एक उदाहरण है, मुझे लगता है कि आप यही बात कर रहे हैं।

<script type="text/javascript"> 

//Set the two dates 
var millennium =new Date(2000, 0, 1) //Month is 0-11 in JavaScript 
today=new Date() 
//Get 1 day in milliseconds 
var one_day=1000*60*60*24 

//Calculate difference btw the two dates, and convert to days 
document.write(Math.ceil((today.getTime()-millennium.getTime())/(one_day))+ 
" days has gone by since the millennium!") 

</script> 
4367 days has gone by since the millennium! 
+0

देखें [कोई वर्ष 0 नहीं था] (http://en.wikipedia.org/wiki/Year_0)। आपको अपनी संदर्भ तिथि के रूप में 1/1/2001 का उपयोग करना चाहिए। – aroth

0

कोड के बिना, यह वास्तव में बताने के लिए आपके पास कौन सा त्रुटि कठिन है, लेकिन मुझे लगता है कि वास्तव में आप क्या कर रहे हैं के रूप में आप ने कहा: ऊपर गोलाई। तो नीचे गोलाई आप के लिए पर्याप्त नहीं है, यहाँ सबसे करीब के दौर का तरीका देखें:

var time = date.getTime(); 
if (time % 60000 >= 30000) time += 60000; 

और फिर गणना के साथ जारी है।

3

ये रहा:

http://jsfiddle.net/uNnfH/1

या आप एक चल उदाहरण के साथ खेलने के लिए नहीं करना चाहते हैं, तो:

window.minutesPerDay = 60 * 24; 

function pad(number) { 
    var result = "" + number; 
    if (result.length < 2) { 
     result = "0" + result; 
    } 

    return result; 
} 

function millisToDaysHoursMinutes(millis) { 
    var seconds = millis/1000; 
    var totalMinutes = seconds/60; 

    var days = totalMinutes/minutesPerDay; 
    totalMinutes -= minutesPerDay * days; 
    var hours = totalMinutes/60; 
    totalMinutes -= hours * 60; 

    return days + "." + pad(hours) + "." + pad(totalMinutes); 
} 
+0

आपके सुझाव के लिए धन्यवाद, मैं कई अलग-अलग दृष्टिकोणों के साथ समाप्त हुआ और यह एक करीबी रन चीज थी जिसे मैं साथ चला गया। मैंने इसे शुरू करने के लिए धन्यवाद से पहले jsfiddle नहीं देखा था। – Mitch

2

पता नहीं कि कितने जवाब की जरूरत है, लेकिन यहाँ एक और है - सिर्फ एक और कुछ जवाब है कि पहले से ही दिया गया है पर ले:

function msToDHM(v) { 
    var days = v/8.64e7 | 0; 
    var hrs = (v % 8.64e7)/ 3.6e6 | 0; 
    var mins = Math.round((v % 3.6e6)/6e4); 

    return days + ':' + z(hrs) + ':' + z(mins); 

    function z(n){return (n<10?'0':'')+n;} 
} 

हालांकि इस तरह के गणना के साथ ध्यान रखना, समय के दिन के उजाले की सीमाओं की बचत को पार मुद्दों का कारण बन जाएगा। यूटीसी में काम करने के लिए हमेशा बेहतर होता है और प्रस्तुति के लिए स्थानीय समय में परिवर्तित होता है।

+0

टिप रॉब के लिए धन्यवाद, मैं इसे ध्यान में रखूंगा। – Mitch

11

Moment.js के लिए नौकरी की तरह लगता है।

var diff = new moment.duration(ms); 
diff.asDays();  // # of days in the duration 
diff.asHours(); // # of hours in the duration 
diff.asMinutes(); // # of minutes in the duration 

MomentJS में अवधि को प्रारूपित करने के अन्य तरीकों में से एक टन हैं।docs बहुत व्यापक हैं।

4

न जानते हो क्यों, लेकिन दूसरों मेरे लिए इसलिए यहाँ

function dhm(ms){ 
    days = Math.floor(ms/(24*60*60*1000)); 
    daysms=ms % (24*60*60*1000); 
    hours = Math.floor((daysms)/(60*60*1000)); 
    hoursms=ms % (60*60*1000); 
    minutes = Math.floor((hoursms)/(60*1000)); 
    minutesms=ms % (60*1000); 
    sec = Math.floor((minutesms)/(1000)); 
    return days+":"+hours+":"+minutes+":"+sec; 
} 

alert(dhm(500000)); 
+0

कमाल !!!!!!!!!!!!!! – Edit

0

काम नहीं किया है मेरा moment.js कोशिश के साथ इस:

function getFormattedMs(ms) { 
    var duration = moment.duration(ms); 
    return moment.utc(duration.asMilliseconds()).format("mm:ss"); 
} 

आप घंटे आप के लिए है दिखाना चाहते हैं जब

function formatDuration(ms) { 
    var duration = moment.duration(ms); 
    return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss"); 
} 

क्षण में इस तरीके को इस Issue में पेश किया गया था: एक समाधान है।

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