कन्वर्ट एचएच: एमएम: एसएस स्ट्रिंग केवल जावास्क्रिप्ट में सेकंड के लिए


97

मुझे इस तरह की आवश्यकता है: एचएच में परिवर्तित समय: एमएम: एसएस प्रारूप केवल सेकंड के लिए?

लेकिन जावास्क्रिप्ट में। मैंने सेकंडों को विभिन्न प्रारूपों में परिवर्तित करने के कई उदाहरण देखे हैं, लेकिन HH: MM: SS सेकंड में नहीं। किसी भी सहायता की सराहना की जाएगी।


उफ़ .. टाइपो के लिए खेद है। हाँ, यह समय hh है: मिमी: ss
श्री रेड्डी

क्या है DDमें HH:MM:DD?
ब्रायन ड्रिस्कॉल

2
यह वैसा ही एल्गोरिथ्म है जैसा कि PHP के सवाल में है।
scottheckel

खैर .. एच (घंटा) == 3600 सेकंड, एम (मिनट) == 60 सेकंड ... तो ..
मिल्कीवेय जो

1
केवल मुझे लगता है कि समाधान सरणी में स्ट्रिंग को विभाजित करने के लिए है और फिर 3600 से घंटे और गुणा 60 से मिनट और गुणा करने के लिए सेकंड भाग के साथ सभी को जोड़ना है। क्या यह सबसे सरल उपाय है?
श्री रेड्डी

जवाबों:


192

इसे इस्तेमाल करे:

var hms = '02:04:33';   // your input string
var a = hms.split(':'); // split it at the colons

// minutes are worth 60 seconds. Hours are worth 60 minutes.
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]); 

console.log(seconds);

3
यहाँ इसका एक प्रोटोटाइप संस्करण है! String.prototype.toSeconds = function () { if (!this) return null; var hms = this.split(':'); return (+hms[0]) * 60 * 60 + (+hms[1]) * 60 + (+hms[2] || 0); } नोट: || 0अंत में इस कोड के किसी भी कार्यान्वयन के लिए अच्छा है - यह HH: MM (क्रोम प्रकार = "समय" इनपुट के साथ समस्याओं को रोकता है जब सेकंड = 0) इस प्रारूप में आउटपुट होगा।
फतेह खालसा

बहुत बढ़िया सामान दोस्त
एडवर्ड

मेरे पास केवल इस मामले में hh:mmनहीं secondsहै कि मुझे क्या संशोधित करना है ..?
श्री विश्व व्यापी

1
@AbdulWaheed इस पंक्ति को बदलें: var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]); सेvar seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60;
Rova

4
संख्यात्मक स्ट्रिंग को संख्या में बदलने के लिए "+" ऑपरेटर का उपयोग एक अच्छा विचार नहीं है। यह छोटा है और "चतुर" दिखता है, लेकिन यह भ्रामक है और साफ कोड नहीं है। इसके बजाय parseInt (x, 10) का उपयोग करें। और वन-लाइनर से बचें। अपरिभाषित इनपुट द्वारा त्रुटियों को भी रोकें। उदाहरण के लिए: यह एक स्ट्रिंग नहीं है, इसमें कोई ":" या केवल "एचएच: एमएम" नहीं है। आदि
डोमिनिक

67

यह फ़ंक्शन "HH: MM: SS" के साथ-साथ "MM: SS" या "SS" को संभालता है।

function hmsToSecondsOnly(str) {
    var p = str.split(':'),
        s = 0, m = 1;

    while (p.length > 0) {
        s += m * parseInt(p.pop(), 10);
        m *= 60;
    }

    return s;
}

अच्छा, मैं इसे रखूँगा यदि आवश्यकता समय बीतने पर आती है तो कोई प्रारूप है। धन्यवाद!
श्री रेड्डी

मेरे लिए अब तक का सर्वश्रेष्ठ उत्तर
रिजवान अज़फर हलीम

यह उत्तर उपयोगी है
माइक एरन

मुझे केवल 'HH: MM' फॉर्मेट में उपयोग करने के लिए अपने फ़ंक्शन को बदलने की क्या आवश्यकता है
noyruto88

35

यह निम्नलिखित के साथ काफी लचीला किया जा सकता है:

'01:02:03'.split(':').reduce((acc,time) => (60 * acc) + +time);

ऐसा इसलिए है क्योंकि घंटे, मिनट और सेकंड के भीतर समय की प्रत्येक इकाई छोटी इकाई की तुलना में 60 से अधिक की एक बहु है। समय को घंटे मिनट और सेकंड घटकों में विभाजित किया जाता है, फिर उच्च इकाइयों के संचित मूल्य का उपयोग करके सेकंड में घटाकर 60 से गुणा किया जाता है क्योंकि यह प्रत्येक इकाई के माध्यम से जाता है।

+timeएक नंबर के लिए समय कास्ट करने के लिए प्रयोग किया जाता है।

यह मूल रूप से समाप्त होता है: (60 * ((60 * HHHH) + MM)) + SS

यदि केवल कुछ सेकंड बीत जाते हैं, तो परिणाम एक स्ट्रिंग होगा, इसलिए यह तय करने के लिए कि हम पूरे परिणाम को एक इंट में डाल सकते हैं:

+('03'.split(':').reduce((acc,time) => (60 * acc) + +time));

Thats वास्तव में बहुत चालाक चालाक है .. सवाल यह है कि यह कितनी तेजी से एक गणना की तुलना में है
ThatBrianDude

4
हां यह चालाक है, लेकिन बिना व्यावहारिक लाभ के कोड को बनाए रखने के लिए मुश्किल बनाने का एक अच्छा उदाहरण है। यह 4 वर्णों को सहेजता है जब स्वीकृत उत्तर के बनाम एक न्यूनतम संस्करण का उपयोग किया जाता है। यह देखते हुए कि कई वेब पेज अब 1MB से अधिक के हैं, कि बचत कुछ कम महत्वहीन है।
रॉजी

4
हालाँकि यह जवाब उतना समझ में नहीं आता है, लेकिन यह इनायत दोनों HH:MM:SSको संभालता है MM:SS, जबकि स्वीकृत जवाब नहीं देता है।
cceney

1
यह एक प्रकार का रूपांतरण बग है, यदि केवल कुछ सेकंड का भाग दिया जाता है। इसे रोकने के लिए आपको 0 के साथ ज्ञापन को स्पष्ट करना होगा। काम करता है: '03'.split(':').reduce((acc,time) => (60 * acc) + +time, 0);क्योंकि एक अप्रत्याशित स्ट्रिंग देता है:'03'.split(':').reduce((acc,time) => (60 * acc) + +time);
फेलिक्स गर्ट्ज़

@FelixGertz अच्छी तरह से देखा, मैं उस मामले के लिए एक तय में संपादित करूँगा।
पॉल

12

चूंकि 1970/01/01 से दिनांक ऑब्जेक्ट का गेटटाइम फ़ंक्शन मिलिसेकंड हो जाता है, हम यह कर सकते हैं:

var time = '12:23:00';
var seconds = new Date('1970-01-01T' + time + 'Z').getTime() / 1000;

1
बस एहसास हुआ, यह डेलाइट बचत समय के साथ काम नहीं करता है। वास्तविक तिथि का उपयोग करने की आवश्यकता है
याबलारगो

1
@Yablargo धन्यवाद। पिछला संस्करण स्थानीय समय-क्षेत्र के साथ बहुत अच्छा काम नहीं करता था, इसलिए मैंने इसे iso 8601 utc डेटाटाइम प्रारूप का उपयोग करने के लिए संपादित किया।
बोसकॉप

12

hh:mm:ssएक पंक्ति में स्ट्रिंग को सेकंड में बदलें । इसके अलावा अनुमति h:m:sप्रारूप और mm:ss, m:sआदि

'08:45:20'.split(':').reverse().reduce((prev, curr, i) => prev + curr*Math.pow(60, i), 0)

4
कृपया अपना उत्तर बताएं
B001

hh:mm:ssएक पंक्ति में स्ट्रिंग को सेकंड में बदलें । इसके अलावा अनुमति h:m:sप्रारूप और mm:ss, m:sआदि
पॉल छिपाएं

अच्छा उत्तर! लेकिन आप reverse(): '00: 01: 11'.split (':') को छोड़ सकते हैं । कम कर सकते हैं ((वैल, एंट्री, i) => वैल + एंट्री * (3600 / Math.pow (60, i), 0 ) === 71
CMR

@CMR, दिलचस्प aproach, लेकिन इसके मामले में mm:ssसही ढंग से काम नहीं करेगा।
पॉल छिपाएँ

Math.pow बहुत धीमा है और कम होने के आधार पर अन्य उत्तरों में दिखाए गए अनुसार बचा जा सकता है
एलेजाद्रो Xalabarder

8

प्रयत्न

time="12:12:12";
tt=time.split(":");
sec=tt[0]*3600+tt[1]*60+tt[2]*1;

5
आह, कि * 1 एक चालाक तरीका है कि यह स्ट्रिंग समागम नहीं करना है :)
डग्ग नबबिट

5

जावास्क्रिप्ट की स्थिर विधि Date.UTC()चाल करती है:

alert(getSeconds('00:22:17'));

function getSeconds(time)
{
    var ts = time.split(':');
    return Date.UTC(1970, 0, 1, ts[0], ts[1], ts[2]) / 1000;
}

4

यहाँ मूल अनुमोदित उत्तर पर शायद थोड़ा अधिक पठनीय रूप है।

const getSeconds = (hms: string) : number => {
  const [hours, minutes, seconds] = hms.split(':');
  return (+hours) * 60 * 60 + (+minutes) * 60 + (+seconds);
};

2
new Date(moment('23:04:33', "HH:mm")).getTime()

आउटपुट: 1499755980000 (मिलीसेकंड में) (1499755980000/1000) (दूसरे में)

नोट: यह आउटपुट गणना 1970-01-01 12: 0: 0 से अब तक भिन्न है और हमें क्षण को लागू करने की आवश्यकता है


ओपी ने सेकंड के लिए नहीं मिलीसेकंड से पूछा
user7294900

हाय user7294900, आपकी टिप्पणी के लिए Thx मैं अपना जवाब अपडेट करूंगा, jst हमें 1000 से विभाजित करने की आवश्यकता है
ITsDEv

1

यह फ़ंक्शन MM: SS के लिए भी काम करता है:

const convertTime = (hms) => {
        if (hms.length <3){
         return hms
        } else if (hms.length <6){
          const a = hms.split(':')
          return hms = (+a[0]) * 60 + (+a[1])
        } else {
          const a = hms.split(':')
          return hms = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2])
        }
      }


1

पॉल https://stackoverflow.com/a/45292588/1191101 द्वारा दिए गए समाधान से लिया गया है, लेकिन पुराने फ़ंक्शन नोटेशन का उपयोग करते हुए इसलिए इसे अन्य जेएस इंजन (जैसे जावा राइनो) में भी उपयोग किया जा सकता है

function strToSeconds (stime)
{
   return +(stime.split(':').reduce(function (acc,time) { return +(60 * acc) + +time }));
}

या यह केवल एक और पठनीय है

function strToSeconds (stime)
{
  var tt = stime.split(':').reverse ();
  return ((tt.length >= 3) ? (+tt[2]): 0)*60*60 + 
         ((tt.length >= 2) ? (+tt[1]): 0)*60 + 
         ((tt.length >= 1) ? (+tt[0]): 0);
}

0

function parsehhmmsst(arg) {
	var result = 0, arr = arg.split(':')
	if (arr[0] < 12) {
		result = arr[0] * 3600 // hours
	}
	result += arr[1] * 60 // minutes
	result += parseInt(arr[2]) // seconds
	if (arg.indexOf('P') > -1) {  // 8:00 PM > 8:00 AM
		result += 43200
	}
	return result
}
$('body').append(parsehhmmsst('12:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('1:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('2:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('3:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('4:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('5:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('6:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('7:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('8:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('9:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('10:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('11:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('12:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('1:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('2:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('3:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('4:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('5:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('6:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('7:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('8:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('9:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('10:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('11:00:00 PM') + '<br>')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


0

आप इसे गतिशील रूप से कर सकते हैं - यदि आप न केवल मुठभेड़ करते हैं: एचएच: मिमी: एसएस, लेकिन यह भी, मिमी: एसएस, या यहां तक ​​कि अकेले एसएस।

var str = '12:99:07';
var times = str.split(":");
times.reverse();
var x = times.length, y = 0, z;
for (var i = 0; i < x; i++) {
    z = times[i] * Math.pow(60, i);
    y += z;
}
console.log(y);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.