Saniye JavaScript ile HH-MM-SS dönüştürmek?


Yanıtlar:


110

Datejs bilmiyor musun ? bilmeli bir zorunluluktur.

Datejs kullanarak sadece şöyle bir şey yazın:

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

--Güncelleme

Günümüzde date.js eski ve bakımsız, bu nedenle TJ Crowder tarafından işaret edildiği gibi daha iyi olan " Moment.js " kullanın .

- güncelleme 2

Lütfen @ Frank'in tek satırlık bir çözümünü kullanın:

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

Bu en iyi çözüm.


11
@Yassir ve Cleiton: FWIW, DateJS yıllarca korunmadı ve birkaç olağanüstü hata var (bildiklerime rağmen, çoğunlukla ayrıştırma ve gece yarısı ile ilgili). momentjs oldukça iyi görünüyor ve şu anda korunuyor.
TJ Crowder

1
@Cleiton, güncellenmiş cevabınız dolu değil. Ben denedim ve aldım: TypeError: Object [object Date] has no method 'clearTime'.
Hamish Grubijan

19
Verilen Moment.js o kadar da büyük değil, ancak bununla yaptığınız tek şey saniyeyi ss: dd: ss'ye dönüştürmekse, biraz aşırıya kaçmak gibi görünüyor. Bunun yerine, bu veya diğer cevaplarda önerilen işlevlerden birini kullanın.
Ola Karlsson

5
Ben diğer çözüm karışımı başka bir js kütüphanesi atmak daha iyi olduğunu düşünüyorum.
Donato

4
Sanırım tek bir eylem için kütüphane eklemek cevap kabul edilmemelidir. Evet, bu işe yarıyor, ama daha iyi çözümler var !!!
Andris

406

Bunu, aşağıdaki gibi JavaScript Tarihi yönteminin yardımıyla harici bir JavaScript kitaplığı olmadan yapmayı başarabilirsiniz:

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

Ya da @Frank'in yorumuna göre; bir astar:

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

39
Mükemmel çalıştığında neden herkesin ekstra kitaplık eklediğini veya matematiği manuel olarak yaptığını bilmiyorum. Teşekkürler!
jminardi

98
Bu bir satıra bile kısaltılabilir: new Date(SECONDS * 1000).toISOString().substr(11, 8);
Frank

4
Parlak. Herhangi bir üçüncü taraf lib olmadan. En iyisi
Riz

41
Bu yaklaşımla ilgili sorun, 24 saat sonra taşması ve bu süreden daha fazlasını göstermenizi engellemesidir. Saniyede 24 saatten az zamanınız varsa mükemmel çözüm.
Renato Gama

1
Bu IE11'de benim için çalışmıyor, anladımObject doesn't support property or method 'toISOString'
NibblyPig

153

Standart Date nesnesinin herhangi bir yerleşik özelliğinin bunu sizin için sadece matematiği kendiniz yapmaktan daha uygun bir şekilde yapacağını düşünmüyorum.

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

Misal:


Sanırım bununla ilgili bazı sorunlar var mı? Denedim zaman 180 saniye döneceğini yüzden ben geri ondalık sayıları başlamıştı 0.05içinde hoursdeğişken. Davam için parseIntsabit bir içine koydum , ama her şey için doğru olacağını düşünmüyorum. Yine de, bu bana yardımcı oldu, çok teşekkürler!
BT643

@ BT643: Bunun üstesinden gelmem garipti. Şimdi yaptım, parseIntbunun için kullanmak istemezsiniz , bu sayıları manipüle etmek değil, dizeleri ayrıştırmak içindir . Math.floorburada ilgili operasyon olurdu.
TJ Crowder

1
Ah tamam! Kodumu değiştirdim. Siz de saniyeler içinde istediğiniz muhtemelen rağmen: seconds = Math.floor(totalSeconds % 60);. Orada da ondalık bir sonuç aldım.
BT643

BT643: totalSeconds % 60sadece kesirli bir kısmı varsa totalSecondskesirli bir kısmı olabilir. Katlamak isteyip istemediğiniz, bu bilgileri kaybetmek veya tutmak isteyip istemediğinize bağlı olacaktır. (Yaptığımız diğer kat operasyonları hiçbir bilgiyi kaybetmez, çünkü sadece minutesve sonunda olacak verileri temizlerler seconds.)
TJ Crowder

8
@HannounYassirconsole.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
Xavi Esteve

60

Bunun biraz eski olduğunu biliyorum, ama ...

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(":")
}

Çıktı verecektir:

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

2
Bir saniyenin kesirleri ne olacak? 03: 45: 45.xxx?
Mike Stoddart

1
@ SantiagoHernández Harika! Bu artık 24 saatten uzun süreler boyunca mükemmel bir şekilde çalışıyor.
Stefnotch

2
+1. Bu veya TJ kabul edilen cevap olmalıdır, çünkü sürenin 24 saati aştığı durumlar için çalışanlar sadece budur (ve soru süreyi sınırlamaz).
George Y.

39

Cleiton'un cevabında belirttiği gibi , moment.js bunun için kullanılabilir:

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

5
Saniye sayısı bir günü aşarsa ne olur?
Gilad Peleg

3
@GiladPeleg Eğer saniye sayısı bir günü aşarsa, gün sayısı dahili olarak hesaplanır ve yalnızca kalan saatleri, dakikaları ve saniyeleri döndürür. Gün sayısını da saymak isterseniz deneyebilirsiniz moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss').
elquimista

9
Saniye sayısı bir yılı aşarsa ne olur?
OrangePot

4
@OrangePot, saniye sayısı bir yılı aşarsa, yıl sayısı dahili olarak hesaplanır ve yalnızca kalan günleri, saatleri, dakikaları ve saniyeleri döndürür. Yıl sayısını da saymak isterseniz deneyebilirsiniz.format('YYYY DDD HH:mm:ss')
David Callanan

1
Ancak bu isteğe bağlı yapılamaz. Bu çirkin görünebilir.
shaedrich

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); // İade 01:05:19 Mükemmel Fonksiyon .. Beğendim
Samrat Saha

17

Bu hile yapar:

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;
}

( Buradan temin edilir )


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"

bu fonksiyonu çok daha kısa ve net yapabiliriz, ancak bu okunabilirliği azaltır, bu yüzden mümkün olduğunca basit ve mümkün olduğunca kararlı yazacağız.

veya bu çalışmayı buradan kontrol edebilirsiniz :


dahası ... u kolayca tüm tarih zaman şey yapmak istiyorum .. kullanın momentJS
Sheelpriy

Teşekkürler! tarayıcı uzantısına Kitaplık eklemenize gerek yoktur. Basit ve çalışıyor!
Arlo

9

Bunu dene:

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

7

İşte Number sınıfının bir uzantısı. toHHMMSS (), saniyeleri ss: dd: ss dizgisine dönüştürür.

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

Noobiler için takip edilmesi kolay sürüm:

 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

Bu işlev bunu yapmalıdır:

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 : ':' );
}

Bir ayırıcıyı geçmeden :, (varsayılan) ayırıcı olarak kullanır :

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

-Ayırıcı olarak kullanmak istiyorsanız , ikinci parametre olarak iletmeniz yeterlidir:

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

Ayrıca bkz bu Fiddle .


(İnput, separator = ":") gibi varsayılan parametreler kullanılabilir. Ayrıca biraz macun
madprops

@madprops: Aslında, cevabımdaki sürüm , daha önce açıkladığım gibi :, separatorparametre için zaten varsayılan olarak ayarlanmış . Bu açıklama tarafından yapılır typeof separator !== 'undefined' ? separator : ':'. Ayrıca, fonksiyonunuz benim bazı kozmetik değişiklikleri kaydetmek için hemen hemen aynıdır ve her ikisi de aynı çıktıyı üretmelidir ... benim sürümüm çok daha iyi tarayıcı desteğine sahip. Sizinki, Internet Explorer veya MS Edge <14'ün HERHANGİ bir sürümünde çalışmaz
John Slegers


5

Milisaniye belirtmek için FFMPEG tarafından kullanılan özel HH: MM: SS.MS (eq: "00: 04: 33.637") durumunda .

[-] [SS:] DD: SS [.m ...]

HH saat sayısını, MM maksimum 2 hane için dakika sayısını ve SS maksimum 2 hane için saniye sayısını ifade eder. Sondaki m SS için ondalık değeri ifade eder.

/* 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)
)

Örnek kullanım, milisaniye aktarım zamanlayıcı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>

Bir medya öğesine bağlı örnek kullanım

/* 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>


Sorunun dışında, php ile yazılmış bu fonksiyonlar:

<?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()Sadece kullanarak new Date(p.getTime()-o.getTime()).toISOString().split("T")[1].split("Z")[0]
JayJay

1
Tamam görünüyor, evet sürümünüz daha hızlı: Karşılaştırma ölçütüne bakın jsben.ch/4sQY1 Kabul edilmiş düzenleme! Teşekkür ederim.
NVRM

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

Yukarıdaki güzel cevaba biraz açıklama yapmak istedim:

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);

İkinci satırda, 1 saatte 3600 saniye olduğu için, toplam saat sayısını elde etmek için toplam saniye sayısını 3600'e böleriz. Herhangi bir ondalık işareti ayırmak için parseInt kullanıyoruz. TotalSec 12600 (3 buçuk saat) olsaydı, 3 tam saatimiz olacağından parseInt (totalSec / 3600) 3 döndürür. Bu durumda neden% 24'e ihtiyacımız var? 24 saati aşarsak, diyelim ki 25 saatimiz (90000 saniye) var, o zaman buradaki modülo 25'i döndürmek yerine bizi tekrar 1'e götürecektir. 24 saat olduğundan sonucu 24 saat sınırı içinde sınırlandırıyor bir gün içinde.

Böyle bir şey gördüğünüzde:

25 % 24

Şöyle düşünün:

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

4

Bu eski iş parçacığına girerken - OP, HH: MM: SS'yi belirtti ve çözümlerin birçoğu, listelenen 24 saatten daha fazlasına ihtiyacınız olduğunu fark edene kadar çalışıyor. Ve belki de tek bir kod satırından fazlasını istemezsiniz. Hadi bakalım:

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

H +: MM: SS değerini döndürür. Kullanmak için şunu kullanın:

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

... güzel, tek katmanlı bir yaklaşım için mümkün olan en az miktarda kodu kullanmaya çalıştım.


1
Ne olduğunu daha kolay görebilmemiz için kodunuzun genişletilmiş / okunan bir sürümünü de sağlayabilir misiniz? Teşekkürler.
Kimball

3

Bir Date nesnesine saniye eklemeyi denediniz mi?

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

Bir örnek: https://jsfiddle.net/j5g2p0dc/5/

Güncellendi: Örnek bağlantı eksik, bu yüzden yeni bir tane oluşturdum.


Yakalanmayan TypeError: dt.addSeconds bir işlev değil
Ikrom

@ Örnek kontrol edin, eski 404 hatası döndürdüğünden jsfiddle'da yeni bir tane oluşturdum
kpull1 14

Görünüşe göre addSecondsDate nesnesinde özel yöntem kullandığınızı serbest bırakmadım Date.prototype.addSeconds = function(seconds){...}. Evet, işe yarıyor, güncelleme için teşekkürler.
Ikrom

2

Burada powtac'ın cevabını temel alarak saniyeleri ss-dd-ss biçimine dönüştüren bir işlev var

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;
}

Örnek kullanım

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

2

Tüm cevaplara baktıktan ve çoğundan memnun kaldıktan sonra, bu benim ortaya çıktığım şeydi. Sohbete çok geç kaldığımı biliyorum, ama işte zaten.

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;
}

Yeni bir Date nesnesi oluşturuyorum, zamanı parametrelerime değiştiriyorum, Date Object'i bir zaman dizesine dönüştürdüm ve dizeyi bölerek ve yalnızca gereken kısmı döndürerek ek şeyleri kaldırdım.

Bu yaklaşımı paylaşacağımı düşündüm, çünkü sonuçları "HH: mm: ss" biçiminde almak için normal ifade, mantık ve matematik akrobasi ihtiyacını ortadan kaldırır ve bunun yerine yerleşik yöntemlere dayanır.

Buradaki belgelere göz atmak isteyebilirsiniz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


2

Bu sorunu çözmek için birçok seçenek var ve önerilen iyi bir seçenek var.

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'dan az sayı ile biçimlendirilmiş sıfır istemiyorsanız,

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

}

Örnek Kod http://fiddly.org/1c476/1


2

Bir satırda TJ Crowder'ın çözümünü kullanarak:

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

Bir satırda, günleri de sayan başka bir çözüm:

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

Kaynak: 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

Aşağıdaki kodu da kullanabilirsiniz:

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;


1

AngularJS kullanan herkes için basit bir çözüm, değeri milisaniyeyi istenen biçime göre bir dizeye dönüştüren tarih API'siyle filtrelemektir . Misal:

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

Bunun milisaniye beklediğini unutmayın, bu nedenle saniyelerden dönüştürüyorsanız (orijinal soru formüle edildiği gibi) timeRemaining'i 1000 ile çarpmak isteyebilirsiniz.


1

Bazılarının saniye sayısının bir günden fazla olduğu sözünü ettim. İşte @Harish Anchu'nun daha uzun süre açıklayan en yüksek puanlı yanıtının uyarlanmış bir sürümü:

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(':');
}

Misal:

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;
}

Kullanım Örneği

alert("186".toHHMMSS());

1

Buradaki cevapların hiçbiri gereksinimlerimi karşılamıyor çünkü ele alabilmek istiyorum

  1. Çok sayıda saniye (gün) ve
  2. Negatif sayılar

Her ne kadar OP tarafından gerekli olmasa da, özellikle az çaba sarf ettiğinde, kenar vakaları kapsamak iyi bir uygulamadır.

Onun söylediği zaman OP saniyelik bir NUMARASI anlamına gelmesidir çok bariz saniye . Neden fonksiyonunuzu sabitleyesiniz 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)geri 6.00:05:51dönmek gerektiğini düşünüyorum iken döner00:02:29:51
user1063287 6:19

0

Bu kodu daha önce basit bir zaman aralığı nesnesi oluşturmak için kullandım:

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
sonuçları döngü çok kötü bir kodlama tekniğidir ve asla kullanılmamalıdır işleme gücünüzü hog ve size laggy site
yan bellavance
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.