জাভাস্ক্রিপ্ট সহ এইচএইচ-এমএম-এসএসে সেকেন্ড রূপান্তর করবেন?


উত্তর:


109

আপনি ডেটজেস জানেন না ? এটি অবশ্যই জানা উচিত।

ডেটজেস ব্যবহার করে, কেবল কিছু লিখুন:

(new Date).clearTime()
          .addSeconds(15457)
          .toString('H:mm:ss');

--হালনাগাদ

আজকাল ডেট.জেস পুরানো এবং রক্ষণাবেক্ষণ করা হয় না, তাই " মোমেন্ট.জেএস " ব্যবহার করুন , যা টিজে ক্রোডার দ্বারা নির্দেশিত হিসাবে অনেক ভাল।

- আপডেট 2

দয়া করে @ ফ্র্যাঙ্কের ওয়ান লাইন সমাধানটি ব্যবহার করুন:

new Date(SECONDS * 1000).toISOString().substr(11, 8)

এটি এখন পর্যন্ত সর্বোত্তম সমাধান।


11
@ ইয়াসির এবং ক্লেটন: এফডাব্লুআইডাব্লু, ডেটজেএস বছরের পর বছর ধরে রক্ষণ করা হয়নি, এবং এর মধ্যে বেশ কয়েকটি অসামান্য বাগ রয়েছে (যদিও আমার জানা মতে, তারা বেশিরভাগ অংশ পার্সিং এবং মধ্যরাত সম্পর্কিত)। momentjs দেখতে বেশ ভাল, এবং বর্তমানে বজায় রাখা হয়।
টিজে ক্রাউডার

1
@ ক্লিটন, আপনার আপডেট করা উত্তর পূর্ণ নয়। আমি এটা চেষ্টা এবং করেছেন: TypeError: Object [object Date] has no method 'clearTime'
হামিশ গ্রুবিজন

19
মঞ্জুর মোমেন্ট.জেস এত বড় কিছু না তবে আপনি এটি দিয়ে যা করছেন তা হ'ল: মিমি: এসএস-তে সেকেন্ডে রূপান্তর করা, এটি কিছুটা ওভারকিলের মতো মনে হয়। বরং এই বা অন্যান্য উত্তরে প্রস্তাবিত ফাংশনগুলির একটি ব্যবহার করুন।
ওলা কার্লসন

5
আমি মনে করি যে অন্য সমাধানটি মিশ্রণে অন্য জেএস লাইব্রেরি ছুঁড়ে ফেলার চেয়ে ভাল।
ডোনাটো

4
একটি সহজ ক্রিয়াকলাপের জন্য লাইব্রেরি যুক্ত করা আমার মনে হয় উত্তর গ্রহণ করা উচিত নয়। হ্যাঁ, এটি কাজ করে তবে এর চেয়ে আরও ভাল সমাধান রয়েছে !!!
অ্যান্ডিস

404

নীচের মতো জাভাস্ক্রিপ্ট তারিখ পদ্ধতির সাহায্যে আপনি কোনও বাহ্যিক জাভাস্ক্রিপ্ট লাইব্রেরি ছাড়াই এটি পরিচালনা করতে পারেন:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);

বা, @ ফ্র্যাঙ্কের মন্তব্য অনুসারে; একটি লাইনার:

new Date(SECONDS * 1000).toISOString().substr(11, 8);

39
আমি জানি না যে প্রত্যেকে কেন অতিরিক্ত লাইব্রেরি যুক্ত করছে বা গণিতটি ম্যানুয়ালি করছে যখন এটি পুরোপুরি কার্যকর হয়। ধন্যবাদ!
jminardi

98
এটি এমনকি এক লাইনেও সংক্ষিপ্ত করা যেতে পারে: new Date(SECONDS * 1000).toISOString().substr(11, 8);
ফ্রাঙ্ক

4
উজ্জ্বল। কোন তৃতীয় পক্ষের lib ছাড়া। এটি সর্বোত্তম
রিজ

41
এই পদ্ধতির সমস্যাটি হ'ল এটি 24 ঘন্টা পরে উপচে পড়বে, আপনাকে এই সময়ের চেয়ে বেশি দেখাতে বাধা দেয়। আপনার যদি সেকেন্ডে 24 ঘন্টােরও কম সময় থাকে তবে নিখুঁত সমাধান।
রেনাটো গামা

1
আইই 11 এ এটি আমার পক্ষে কাজ করে না, আমি পাইObject doesn't support property or method 'toISOString'
নিবল্বিপিগ

153

আমি মনে করি না যে স্ট্যান্ডার্ড ডেট অবজেক্টের কোনও অন্তর্নির্মিত বৈশিষ্ট্যটি আপনার পক্ষে এমনভাবে এমনভাবে কাজ করবে যা কেবল নিজেরাই গণিত করার চেয়ে বেশি সুবিধাজনক।

hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;

উদাহরণ:


আমার মনে হয় এর সাথে কিছু সমস্যা আছে? যখন আমি এটা চেষ্টা, আমি দশমিক পেয়ে ছিল ফিরে, তাই 180 সেকেন্ড ফিরে আসবে 0.05মধ্যে hoursপরিবর্তনশীল। আমি এটিকে এটির ভিতরে রেখেছিলাম parseIntযা এটি আমার ক্ষেত্রে স্থির করেছে, তবে আমি মনে করি না যে এটি সব কিছুর জন্য সঠিক হবে। তবুও, এটি আমাকে সাহায্য করেছে, তাই ধন্যবাদ!
বিটি 643

@ বিটি 3৪৩: অদ্ভুত যে আমি এটি পরিচালনা করি নি। আমি এখন এটি করেছি, আপনি parseIntএটির জন্য ব্যবহার করতে চান না , এটি স্ট্রিং পার্সিংয়ের জন্য , সংখ্যাগুলি হেরফের করার জন্য নয়। Math.floorএখানে প্রাসঙ্গিক অপারেশন হবে।
টিজে ক্রোডার

1
আহ, ঠিক আছে! আমার কোড পরিবর্তন করা হয়েছে। আপনি সম্ভবত পাশাপাশি সেকেন্ড তে এটি চান না যদিও: seconds = Math.floor(totalSeconds % 60);। আমি সেখানেও দশমিক ফলাফল পেয়েছি।
বিটি 643

@ বিটি 3৪৩৩: totalSeconds % 60ভগ্নাংশের অংশ থাকলে totalSecondsকেবলমাত্র একটি ভগ্নাংশ থাকতে পারে। আপনি মেঝে ফেলতে চান কিনা তা নির্ভর করে আপনি সেই তথ্যটি হারাতে বা এটি ধরে রাখতে চান কিনা তার উপর নির্ভর করবে। (অন্যান্য ফ্লোর অপারেশনগুলি আমরা কোনও তথ্য হারাবেন না, কারণ তারা কেবল ডেটা সাফ করে দিচ্ছে যা শেষ হবে minutesএবং seconds।)
টিজে ক্রোডার

8
@ হানানউইয়াসিরconsole.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
জাভি এস্তেভ

60

আমি জানি এটা বেশ পুরানো, কিন্তু ...

ES2015:

var toHHMMSS = (secs) => {
    var sec_num = parseInt(secs, 10)
    var hours   = Math.floor(sec_num / 3600)
    var minutes = Math.floor(sec_num / 60) % 60
    var seconds = sec_num % 60

    return [hours,minutes,seconds]
        .map(v => v < 10 ? "0" + v : v)
        .filter((v,i) => v !== "00" || i > 0)
        .join(":")
}

এটি আউটপুট দেবে:

toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18

2
এক সেকেন্ডের ভগ্নাংশ সম্পর্কে কী বলা যায়? 03: 45: 45.xxx?
মাইক স্টোডার্ড্ট

1
সান্টিয়াগো হার্নান্দেজ গ্রেট! এটি এখন 24 ঘন্টারও বেশি সময় ধরে পুরোপুরি কাজ করে।
স্টিফনচ

2
+1 টি। এটি বা টিজে গ্রহণযোগ্য উত্তর হওয়া উচিত, কারণ সময়সীমা 24 ঘন্টা অতিক্রম করে এমন পরিস্থিতিতে শুধুমাত্র সেইগুলি কাজ করে (এবং প্রশ্নটির সময়সীমা সীমাবদ্ধ হয় না)।
জর্জ ওয়াই।

38

ক্লাইটন তার উত্তরে যেমন উল্লেখ করেছেন , moment.js এর জন্য ব্যবহার করা যেতে পারে:

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');

5
সেকেন্ডের সংখ্যা যদি একদিনের বেশি হয় তবে কী হবে?
গিলাদ পেলেগ

3
@ গিলাডপ্লেগ যদি সেকেন্ডের সংখ্যা কোনও দিন অতিক্রম করে, দিনের সংখ্যা অভ্যন্তরীণভাবে গণনা করা হয় এবং এটি কেবলমাত্র বাকি ঘন্টা, মিনিট এবং সেকেন্ডে ফিরে আসবে। আপনি যদি দিনের সংখ্যাও গণনা করতে চান তবে চেষ্টা করতে পারেন moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss')
এলকুইমিস্ট

9
এক বছরে সেকেন্ডের সংখ্যা অতিক্রম করলে কী হবে?
অরেঞ্জপট

3
@ ওরেঞ্জপট যদি সেকেন্ডের সংখ্যা এক বছর অতিক্রম করে তবে বছরের সংখ্যা অভ্যন্তরীণভাবে গণনা করা হয় এবং এটি কেবলমাত্র বাকি দিন, ঘন্টা, মিনিট এবং সেকেন্ডে ফিরে আসবে। আপনি যদি বছরের সংখ্যাও গণনা করতে চান তবে আপনি চেষ্টা করতে পারেন.format('YYYY DDD HH:mm:ss')
ডেভিড ক্যালানান

1
তবে এটি alচ্ছিক করা যায় না। এটি দেখতে কুৎসিত দেখাচ্ছে।
শ্যাডরিচ

22
function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

2
formatSeconds (3919); // রিটার্নস 01:05:19 দুর্দান্ত ফাংশন .. এটির মত
সম্রাট সাহা

17

এটি কৌশলটি করে:

function secondstotime(secs)
{
    var t = new Date(1970,0,1);
    t.setSeconds(secs);
    var s = t.toTimeString().substr(0,8);
    if(secs > 86399)
        s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
    return s;
}

( এখান থেকে উত্সিত )


12
var  timeInSec = "661"; //even it can be string

String.prototype.toHHMMSS = function () { 
   /* extend the String by using prototypical inheritance */
    var seconds = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(seconds / 3600);
    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
    seconds = seconds - (hours * 3600) - (minutes * 60);

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    var time    = hours+':'+minutes+':'+seconds;
    return time;
}

alert("5678".toHHMMSS());   // "01:34:38"
console.log(timeInSec.toHHMMSS());   //"00:11:01"

আমরা এই ফাংশনটিকে অনেক খাটো এবং খাস্তা করতে পারি তবে এটি পাঠযোগ্যতা হ্রাস করে, তাই আমরা এটিকে যতটা সম্ভব সহজ এবং যতটা সম্ভব স্থিতিশীলভাবে লিখব।

অথবা আপনি এখানে এটি কাজ করতে পারেন :


তদুপরি ... আপনি যদি সমস্ত তারিখের সময় সহজেই করতে চান .. ব্যবহার করুন মুহুর্তের জেএস
শীলপ্রি

ধন্যবাদ! ব্রাউজার এক্সটেনশনে একটি লাইব্রেরি অন্তর্ভুক্ত করার দরকার নেই। সহজ এবং কাজ!
আরলো

9

এটা চেষ্টা কর:

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}

7

এখানে নম্বর শ্রেণিতে একটি এক্সটেনশন। টুএইচএমএমএসএস () সেকেন্ডকে এইচএইচ: মিমি: এসএস স্ট্রিংয়ে রূপান্তর করে।

Number.prototype.toHHMMSS = function() {
  var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600);
  var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2);
  var seconds = ("00" + (this % 3600) % 60).slice(-2);
  return hours + ":" + minutes + ":" + seconds;
}

// Usage: [number variable].toHHMMSS();

// Here is a simple test
var totalseconds = 1234;
document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS();
// HTML of the test
<div id="timespan"></div>


5

নুবিদের জন্য সংস্করণ অনুসরণ করা সহজ:

 var totalNumberOfSeconds = YOURNUMBEROFSECONDS;
 var hours = parseInt( totalNumberOfSeconds / 3600 );
 var minutes = parseInt( (totalNumberOfSeconds - (hours * 3600)) / 60 );
 var seconds = Math.floor((totalNumberOfSeconds - ((hours * 3600) + (minutes * 60))));
 var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
 console.log(result);

5

এই ফাংশনটি এটি করা উচিত:

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

বিভাজকটি পাস না করে :এটি (ডিফল্ট) বিভাজক হিসাবে ব্যবহার করে:

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

আপনি যদি পৃথক -হিসাবে ব্যবহার করতে চান তবে এটি দ্বিতীয় প্যারামিটার হিসাবে পাস করুন:

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

আরও দেখুন এই বেহালার


ডিফল্ট প্যারামিটারগুলি ব্যবহার করতে পারে (ইনপুট, বিভাজক = ":")। এছাড়াও আমি কিছুটা পেস্ট
পি

@ এমডপ্রপস: আসলে, আমার উত্তরের সংস্করণটি ইতিমধ্যে প্যারামিটারের :জন্য পূর্বনির্ধারিত হিসাবে সেট করেছে separatoralready এটি বিবৃতি দ্বারা করা হয় typeof separator !== 'undefined' ? separator : ':'। এছাড়াও, আপনার ফাংশনটি কিছু প্রসাধনী পরিবর্তনগুলি সংরক্ষণ করার জন্য খনি হিসাবে বেশ সমান এবং তাদের উভয়ের একই আউটপুট উত্পাদন করা উচিত ... আমার সংস্করণটি ছাড়া আরও ভাল ব্রাউজার সমর্থন রয়েছে। আপনারাই ইন্টারনেট এক্সপ্লোরার বা এমএস এজ <14. এর কোনও সংস্করণে কাজ করবেন না
জন স্লেজার 21

5

নীচে প্রদত্ত কোডটি যা কয়েক সেকেন্ডকে hh-mm-ss ফর্ম্যাটে রূপান্তর করবে:

var measuredTime = new Date(null);
measuredTime.setSeconds(4995); // specify value of SECONDS
var MHSTime = measuredTime.toISOString().substr(11, 8);

জাভাস্ক্রিপ্টে রূপান্তর সেকেন্ড থেকে এইচএইচ-এমএম-এসএস ফর্ম্যাটে বিকল্প পদ্ধতি পান


আপনি কি এই উত্তর থেকে পেস্ট অনুলিপি করেছেন ?
স্টিফানসআর্যা

5

এইচ এইচ: এমএম: এসএস.এমএস এর বিশেষ ক্ষেত্রে (যেমন: "00: 04: 33.637") এফএফএমপিইজি মিলি সেকেন্ড নির্দিষ্ট করার জন্য ব্যবহৃত হয়েছে ।

[-] [এইচ:] এম এম: এস এস [.m ...]

এইচএইচটি ঘন্টাগুলির সংখ্যা, এমএম সর্বোচ্চ 2 টি সংখ্যার জন্য মিনিটের সংখ্যা এবং এসএস সর্বোচ্চ 2 ডিজিটের জন্য সেকেন্ডের সংখ্যা প্রকাশ করে। শেষে মিঃ এসএসের জন্য দশমিক মান প্রকাশ করে।

/* HH:MM:SS.MS to (FLOAT)seconds ---------------*/
function timerToSec(timer){
   let vtimer = timer.split(":")
   let vhours = +vtimer[0]
   let vminutes = +vtimer[1]
   let vseconds = parseFloat(vtimer[2])
   return vhours * 3600 + vminutes * 60 + vseconds
}

/* Seconds to (STRING)HH:MM:SS.MS --------------*/
function secToTimer(sec){
  let o = new Date(0)
  let p =  new Date(sec*1000)  
  return new Date(p.getTime()-o.getTime())
    .toISOString()
    .split("T")[1]
    .split("Z")[0]
}

/* Example: 7hours, 4 minutes, 33 seconds and 637 milliseconds */
const t = "07:04:33.637"
console.log(
  t + " => " +
  timerToSec(t) +
  "s"
)

/* Test: 25473 seconds and 637 milliseconds */
const s = 25473.637 // "25473.637"
console.log(
  s + "s => " + 
  secToTimer(s)
)

ব্যবহারের উদাহরণ, একটি মিলিসেকেন্ড পরিবহন টাইমার:

/* Seconds to (STRING)HH:MM:SS.MS --------------*/
function secToTimer(sec){
  let o = new Date(0)
  let p =  new Date(sec*1000)  
  return new Date(p.getTime()-o.getTime())
    .toISOString()
    .split("T")[1]
    .split("Z")[0]
}

let job, origin = new Date().getTime()
const timer = () => {
  job = requestAnimationFrame(timer)
  OUT.textContent = secToTimer((new Date().getTime() - origin) / 1000)
}

requestAnimationFrame(timer)
span {font-size:4rem}
<span id="OUT"></span>
<br>
<button onclick="origin = new Date().getTime()">RESET</button>
<button onclick="requestAnimationFrame(timer)">RESTART</button>
<button onclick="cancelAnimationFrame(job)">STOP</button>

মিডিয়া উপাদানকে আবদ্ধ করে ব্যবহারের উদাহরণ

/* Seconds to (STRING)HH:MM:SS.MS --------------*/
function secToTimer(sec){
  let o = new Date(0)
  let p =  new Date(sec*1000)  
  return new Date(p.getTime()-o.getTime())
    .toISOString()
    .split("T")[1]
    .split("Z")[0]
}

VIDEO.addEventListener("timeupdate", function(e){
  OUT.textContent = secToTimer(e.target.currentTime)
}, false)
span {font-size:4rem}
<span id="OUT"></span><br>
<video id="VIDEO" width="400" controls autoplay>
  <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>


প্রশ্নের বাইরে, এই ফাংশনগুলি পিএইচপিতে লেখা:

<?php 
/* HH:MM:SS to (FLOAT)seconds ------------------*/
function timerToSec($timer){
  $vtimer = explode(":",$timer);
  $vhours = (int)$vtimer[0];
  $vminutes = (int)$vtimer[1];
  $vseconds = (float)$vtimer[2];
  return $vhours * 3600 + $vminutes * 60 + $vseconds;
}
/* Seconds to (STRING)HH:MM:SS -----------------*/
function secToTimer($sec){
  return explode(" ", date("H:i:s", $sec))[0];  
}

1
আপনি + "." + p.getMilliseconds()কেবল ব্যবহার করে বাদ দিতে পারেনnew Date(p.getTime()-o.getTime()).toISOString().split("T")[1].split("Z")[0]
জয়জয়

1
ঠিক আছে, হ্যাঁ আপনার সংস্করণটি এটি দ্রুত দেখায়: বেঞ্চমার্ক jsben.ch/4sQY1 স্বীকৃত সম্পাদনা দেখুন! ধন্যবাদ.
এনভিআরএম

4
var time1 = date1.getTime();
var time2 = date2.getTime();
var totalMilisec = time2 - time1;

alert(DateFormat('hh:mm:ss',new Date(totalMilisec)))

 /* ----------------------------------------------------------
 *  Field        | Full Form          | Short Form
 *  -------------|--------------------|-----------------------
 *  Year         | yyyy (4 digits)    | yy (2 digits)
 *  Month        | MMM (abbr.)        | MM (2 digits)
                 | NNN (name)         |
 *  Day of Month | dd (2 digits)      | 
 *  Day of Week  | EE (name)          | E (abbr)
 *  Hour (1-12)  | hh (2 digits)      | 
 *  Minute       | mm (2 digits)      | 
 *  Second       | ss (2 digits)      | 
 *  ----------------------------------------------------------
 */
function DateFormat(formatString,date){
    if (typeof date=='undefined'){
    var DateToFormat=new Date();
    }
    else{
        var DateToFormat=date;
    }
    var DAY         = DateToFormat.getDate();
    var DAYidx      = DateToFormat.getDay();
    var MONTH       = DateToFormat.getMonth()+1;
    var MONTHidx    = DateToFormat.getMonth();
    var YEAR        = DateToFormat.getYear();
    var FULL_YEAR   = DateToFormat.getFullYear();
    var HOUR        = DateToFormat.getHours();
    var MINUTES     = DateToFormat.getMinutes();
    var SECONDS     = DateToFormat.getSeconds();

    var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    var strMONTH;
    var strDAY;
    var strHOUR;
    var strMINUTES;
    var strSECONDS;
    var Separator;

    if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
        strMONTH = "0" + MONTH;
    else
        strMONTH=MONTH;
    if(parseInt(DAY)< 10 && DAY.toString().length < 2)
        strDAY = "0" + DAY;
    else
        strDAY=DAY;
    if(parseInt(HOUR)< 10 && HOUR.toString().length < 2)
        strHOUR = "0" + HOUR;
    else
        strHOUR=HOUR;
    if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2)
        strMINUTES = "0" + MINUTES;
    else
        strMINUTES=MINUTES;
    if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2)
        strSECONDS = "0" + SECONDS;
    else
        strSECONDS=SECONDS;

    switch (formatString){
        case "hh:mm:ss":
            return strHOUR + ':' + strMINUTES + ':' + strSECONDS;
        break;
        //More cases to meet your requirements.
    }
}

4

আমি উপরের সুন্দর উত্তরের জন্য একটু ব্যাখ্যা দিতে চেয়েছিলাম:

var totalSec = new Date().getTime() / 1000;
var hours = parseInt( totalSec / 3600 ) % 24;
var minutes = parseInt( totalSec / 60 ) % 60;
var seconds = totalSec % 60;

var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds  < 10 ? "0" + seconds : seconds);

দ্বিতীয় লাইনে, যেহেতু 1 ঘন্টার মধ্যে 3600 সেকেন্ড রয়েছে, তাই আমরা ঘন্টাগুলি মোট সংখ্যা পেতে মোট সেকেন্ডের সংখ্যাকে 3600 দিয়ে বিভক্ত করি। আমরা কোনও দশমিক বন্ধ করতে পার্সেন্ট ব্যবহার করি। যদি টোটল সেকটি 12600 (সাড়ে তিন ঘন্টা) হয়, তবে পার্সিয়ান্ট (টোটেলসেক / 3600) 3 ফিরে আসবে, যেহেতু আমাদের কাছে পুরো 3 ঘন্টা থাকবে। এই ক্ষেত্রে আমাদের কেন% 24 দরকার? যদি আমরা ২৪ ঘন্টা অতিক্রম করি, তবে আমাদের বলুন যে আমাদের 25 ঘন্টা (90000 সেকেন্ড) রয়েছে, তবে এখানকার মডুলুগুলি 25 ফেরার পরিবর্তে আমাদের আবার 1 এ নিয়ে যাবে It এটি 24 ঘন্টার সীমার মধ্যেই ফলাফলকে সীমাবদ্ধ রাখছে, যেহেতু 24 ঘন্টা রয়েছে একদিন.

আপনি যখন এই জাতীয় কিছু দেখেন:

25 % 24

এইভাবে ভেবে দেখুন:

25 mod 24 or what is the remainder when we divide 25 by 24

4

এই পুরানো থ্রেডটিতে চিমিং করা - ওপিতে বলা হয়েছে এইচএইচ: এমএম: এসএস এবং অনেকগুলি সমাধান কাজ করে, যতক্ষণ না আপনি বুঝতে পারবেন আপনার 24 ঘন্টারও বেশি তালিকাভুক্ত হওয়া দরকার। এবং সম্ভবত আপনি কোডের একক লাইন চেয়ে বেশি চান না। আপনি এখানে যান:

d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)}

এটি এইচ +: এমএম: এসএস প্রদান করে। এটি ব্যবহার করতে, সহজভাবে ব্যবহার করুন:

d(91260);     // returns "25:21:00"
d(960);       // returns "0:16:00"

... আমি চেষ্টা করেছি একটি কম ওয়ানলাইনারের সাথে যোগাযোগের জন্য, সর্বনিম্ন কোডটি সম্ভব ব্যবহার করার চেষ্টা করেছি।


1
আপনি কি পাশাপাশি আপনার কোডের একটি প্রসারিত / পড়ার সংস্করণ সরবরাহ করতে পারেন যাতে আমরা আরও সহজেই কী ঘটছে তা দেখতে পাচ্ছি? ধন্যবাদ।
কিমবল

3

আপনি কি কোনও ডেট অবজেক্টে সেকেন্ড যোগ করার চেষ্টা করেছেন?

var dt = new Date();
dt.addSeconds(1234);

একটি নমুনা: https://jsfiddle.net/j5g2p0dc/5/

আপডেট হয়েছে: নমুনা লিঙ্কটি অনুপস্থিত তাই আমি একটি নতুন তৈরি করেছি।


আনকড টাইপ এরিয়ার: dt.addSeconds কোনও ফাংশন নয়
ইকরাম

@ ইক্রোম নমুনাটি পরীক্ষা করে দেখুন, আমি পুরনো একজন 404 ত্রুটি ফিরে আসার পর থেকে জেসফিডে একটি নতুন তৈরি করেছি
কেপুল 1

দেখে মনে হচ্ছে যে আমি প্রকাশ করি নি যে আপনি addSecondsতারিখের মতো পছন্দসই পদ্ধতিটি ব্যবহার করছেন Date.prototype.addSeconds = function(seconds){...}। হ্যাঁ, এটি কাজ করে, আপডেটের জন্য ধন্যবাদ।
ইকরাম

2

এখানে powtac এর উত্তর ভিত্তিক HH-MM-SS ফর্ম্যাটে রূপান্তর সেকেন্ড একটি ফাংশন এখানে

jsfiddle

/** 
 * Convert seconds to hh-mm-ss format.
 * @param {number} totalSeconds - the total seconds to convert to hh- mm-ss
**/
var SecondsTohhmmss = function(totalSeconds) {
  var hours   = Math.floor(totalSeconds / 3600);
  var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60);
  var seconds = totalSeconds - (hours * 3600) - (minutes * 60);

  // round seconds
  seconds = Math.round(seconds * 100) / 100

  var result = (hours < 10 ? "0" + hours : hours);
      result += "-" + (minutes < 10 ? "0" + minutes : minutes);
      result += "-" + (seconds  < 10 ? "0" + seconds : seconds);
  return result;
}

উদাহরণ ব্যবহার

var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10

2

সমস্ত উত্তরগুলি দেখার পরে এবং সেগুলির বেশিরভাগের সাথে সন্তুষ্ট না হওয়ার পরে, আমি এটাই সামনে এলাম। আমি জানি আমি কথোপকথনে খুব দেরী করেছি, তবে এখানে এটি যাইহোক।

function secsToTime(secs){
  var time = new Date(); 
  // create Date object and set to today's date and time
  time.setHours(parseInt(secs/3600) % 24);
  time.setMinutes(parseInt(secs/60) % 60);
  time.setSeconds(parseInt(secs%60));
  time = time.toTimeString().split(" ")[0];
  // time.toString() = "HH:mm:ss GMT-0800 (PST)"
  // time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"]
  // time.toTimeString().split(" ")[0]; = "HH:mm:ss"
  return time;
}

আমি একটি নতুন তারিখ অবজেক্ট তৈরি করি, সময়টিকে আমার প্যারামিটারে পরিবর্তন করি, তারিখ অবজেক্টকে একটি সময়ের স্ট্রিংয়ে রূপান্তর করি এবং স্ট্রিংকে বিভক্ত করে এবং প্রয়োজনীয় অংশটি ফেরত দিয়ে অতিরিক্ত জিনিসগুলি সরিয়ে ফেলি।

আমি ভেবেছিলাম আমি এই পদ্ধতিটি ভাগ করে নেব, যেহেতু এটি "এইচএইচ: মিমি: এসএস" ফর্ম্যাটে ফলাফল পাওয়ার জন্য রেইগেক্স, যুক্তি এবং গণিতের অ্যাক্রোব্যাটিকসের প্রয়োজনীয়তা সরিয়ে দেয় এবং পরিবর্তে এটি পদ্ধতিতে অন্তর্নিহিতের উপর নির্ভর করে।

আপনি এখানে ডকুমেন্টেশনটি একবার দেখতে চাইতে পারেন: https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / তারিখ


2

এই সমস্যার সমাধান করার জন্য প্রচুর বিকল্প রয়েছে এবং সুস্পষ্টভাবে ভাল বিকল্প সম্পর্কে পরামর্শ দেওয়া হয়েছে তবে আমি এখানে আরও একটি অনুকূলিতকরণ কোড যুক্ত করতে চাই

function formatSeconds(sec) {
     return [(sec / 3600), ((sec % 3600) / 60), ((sec % 3600) % 60)]
            .map(v => v < 10 ? "0" + parseInt(v) : parseInt(v))
            .filter((i, j) => i !== "00" || j > 0)
            .join(":");
}

আপনি যদি 10 এর চেয়ে কম সংখ্যার সাথে ফর্ম্যাট শূন্য না চান তবে আপনি ব্যবহার করতে পারেন

function formatSeconds(sec) {
  return parseInt(sec / 3600) + ':' + parseInt((sec % 3600) / 60) + ':' + parseInt((sec % 3600) % 60);

}

নমুনা কোড http://fiddly.org/1c476/1


2

এক লাইনে টিজে ক্রডারের সমাধানটি ব্যবহার করে:

secToHHMMSS = seconds => `${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}`

এক লাইনে, আরেকটি সমাধান যা দিনগুলিও গণনা করে:

secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}`

সূত্র: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276


2
var sec_to_hms = function(sec){
var min, hours;
     sec = sec - (min = Math.floor(sec/60))*60;
     min = min - (hours = Math.floor(min/60))*60;
     return (hours?hours+':':'') + ((min+'').padStart(2, '0')) + ':'+ ((sec+'').padStart(2, '0'));
}
alert(sec_to_hms(2442542));



1

অ্যাঙ্গুলারজেএস ব্যবহার করা যে কোনও ব্যক্তির জন্য, একটি সহজ সমাধান হ'ল তারিখের এপিআই দিয়ে মান ফিল্টার করা যা মিলি সেকেন্ডগুলিকে অনুরোধ করা ফর্ম্যাটটির ভিত্তিতে স্ট্রিংয়ে রূপান্তর করে। উদাহরণ:

<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>

নোট করুন যে এটি মিলিসেকেন্ডগুলি প্রত্যাশা করে, তাই আপনি সেকেন্ড থেকে রূপান্তর করতে পারলে 1000 দ্বারা গুণমানের সময়কে গুণতে চাইতে পারেন (আসল প্রশ্নটি যেমন তৈরি হয়েছিল)।


1

আমি কেসটি চালিয়েছি এমন কয়েকজন উল্লেখ করেছেন যেখানে এক দিনের চেয়ে সেকেন্ডের সংখ্যা বেশি। এখানে @ হরিশ আঁচুর শীর্ষ রেট করা উত্তরের একটি অভিযোজিত সংস্করণ রয়েছে যা দীর্ঘ সময়ের জন্য অ্যাকাউন্ট করে:

function secondsToTime(seconds) {
  const arr = new Date(seconds * 1000).toISOString().substr(11, 8).split(':');

  const days = Math.floor(seconds / 86400);
  arr[0] = parseInt(arr[0], 10) + days * 24;

  return arr.join(':');
}

উদাহরণ:

secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16'

1
String.prototype.toHHMMSS = function () {
    var sec_num = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(sec_num / 3600);
    var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
    var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

ব্যবহারের উদাহরণ

alert("186".toHHMMSS());

1

আমি হ্যান্ডেল করতে সক্ষম হতে চাই বলে এখানে উত্তরগুলির কোনওোটাই আমার প্রয়োজনীয়তা পূরণ করে না

  1. সেকেন্ডের বড় সংখ্যা (দিন), এবং
  2. Gণাত্মক সংখ্যা

যদিও এগুলি ওপি দ্বারা প্রয়োজনীয় নয়, প্রান্তের মামলাগুলি কভার করা ভাল অনুশীলন, বিশেষত যখন সামান্য প্রচেষ্টা লাগে।

এটি অত্যন্ত সুস্পষ্ট যে ওপির অর্থ সেকেন্ড বলার সময় একটি সেকেন্ডের সংখ্যা । আপনার ফাংশনটি কেন খোলা হবে String?

function secondsToTimeSpan(seconds) {
    const value = Math.abs(seconds);
    const days = Math.floor(value / 1440);
    const hours = Math.floor((value - (days * 1440)) / 3600);
    const min = Math.floor((value - (days * 1440) - (hours * 3600)) / 60);
    const sec = value - (days * 1440) - (hours * 3600) - (min * 60);
    return `${seconds < 0 ? '-':''}${days > 0 ? days + '.':''}${hours < 10 ? '0' + hours:hours}:${min < 10 ? '0' + min:min}:${sec < 10 ? '0' + sec:sec}`
}
secondsToTimeSpan(0);       // => 00:00:00
secondsToTimeSpan(1);       // => 00:00:01
secondsToTimeSpan(1440);    // => 1.00:00:00
secondsToTimeSpan(-1440);   // => -1.00:00:00
secondsToTimeSpan(-1);      // => -00:00:01

1
secondsToTimeSpan(8991)প্রত্যাবর্তন 6.00:05:51যেখানে আমি মনে করি এটি ফিরে 00:02:29:51
আসা

0

একটি সাধারণ টাইমস্প্যান অবজেক্ট তৈরি করার আগে আমি এই কোডটি ব্যবহার করেছি:

function TimeSpan(time) {
this.hours = 0;
this.minutes = 0;
this.seconds = 0;

while(time >= 3600)
{
    this.hours++;
    time -= 3600;
}

while(time >= 60)
{
    this.minutes++;
    time -= 60;
}

this.seconds = time;
}

var timespan = new Timespan(3662);

1
লুপিং ফলাফলগুলি একটি খুব খারাপ কোডিং কৌশল এবং এটি কখনও ব্যবহার করা উচিত নয় এটি আপনার প্রসেসিং শক্তি হোগ করবে এবং আপনাকে একটি
ল্যাগি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.