Jak mogę zamienić sekundy na HH:mm:ss
?
W tej chwili korzystam z poniższej funkcji
render: function (data){
return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}
Działa to na Chrome, ale w Firefoxie przez 12 sekund otrzymuję 01:00:12
, że chciałbym używać momentu.js do kompatybilności z różnymi przeglądarkami
Próbowałem tego, ale nie działa
render: function (data){
return moment(data).format('HH:mm:ss');
}
Co ja robię źle?
EDYTOWAĆ
Udało mi się znaleźć rozwiązanie bez moment.js, które jest następujące
return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
Wciąż ciekawi mnie, jak mogę to zrobić w chwili.js
javascript
momentjs
QGA
źródło
źródło
Odpowiedzi:
Z tego postu spróbuję tego, aby uniknąć problemów ze skokiem
moment("2015-01-01").startOf('day') .seconds(s) .format('H:mm:ss');
Nie uruchomiłem jsPerf, ale myślę, że jest to szybsze niż tworzenie nowych obiektów daty milion razy
function pad(num) { return ("0"+num).slice(-2); } function hhmmss(secs) { var minutes = Math.floor(secs / 60); secs = secs%60; var hours = Math.floor(minutes/60) minutes = minutes%60; return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`; // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers }
Pokaż fragment kodu
function pad(num) { return ("0"+num).slice(-2); } function hhmmss(secs) { var minutes = Math.floor(secs / 60); secs = secs%60; var hours = Math.floor(minutes/60) minutes = minutes%60; return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`; // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers } for (var i=60;i<=60*60*5;i++) { document.write(hhmmss(i)+'<br/>'); } /* function show(s) { var d = new Date(); var d1 = new Date(d.getTime()+s*1000); var hms = hhmmss(s); return (s+"s = "+ hms + " - "+ Math.floor((d1-d)/1000)+"\n"+d.toString().split("GMT")[0]+"\n"+d1.toString().split("GMT")[0]); } */
źródło
`${pad(hours)}:${pad(minutes)}:${pad(secs)}`
Jest to podobne do odpowiedzi mplungjan, do której odwołuje się inny post, ale bardziej zwięzłe:
const secs = 456; const formatted = moment.utc(secs*1000).format('HH:mm:ss'); document.write(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
Cierpi na te same zastrzeżenia, np. Jeśli sekundy przekroczą jeden dzień (86400), nie otrzymasz tego, czego się spodziewasz.
źródło
Możesz użyć wtyczki formatu czasu trwania :
var seconds = 3820; var duration = moment.duration(seconds, 'seconds'); var formatted = duration.format("hh:mm:ss"); console.log(formatted); // 01:03:40
<!-- Moment.js library --> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> <!-- moment-duration-format plugin --> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>
Zobacz także to Fiddle
Aktualizacja: Aby uniknąć przycinania dla wartości krótszych niż 60 sekund, użyj
{ trim: false }
:var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"
źródło
var seconds = 2000 ; // or "2000" seconds = parseInt(seconds) //because moment js dont know to handle number in string format var format = Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
źródło
Jak poprawnie używać czasów trwania moment.js? | Użyj w kodach momentu.duration ()
Najpierw musisz zaimportować
moment
imoment-duration-format
.import moment from 'moment'; import 'moment-duration-format';
Następnie użyj funkcji czasu trwania. Zastosujmy powyższy przykład: 28800 = 8 rano.
moment.duration(28800, "seconds").format("h:mm a");
🎉Cóż, nie masz powyższego błędu typu. 🤔Czy otrzymujesz właściwą wartość o 8:00? Nie…, otrzymana wartość to 8:00. Format Moment.js nie działa tak, jak powinien.
💡 Rozwiązaniem jest zamiana sekund na milisekundy i użycie czasu UTC.
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
W porządku, teraz mamy 8:00. Jeśli chcesz, aby godzina 8 rano zamiast 8:00 była czasem całkowania, musimy wykonać RegExp
const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a'); time.replace(/:00/g, '')
źródło
Do 24 godz. Jak
Duration.format
jest przestarzałe, z [email protected]const seconds = 123; moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');
źródło
Moje rozwiązanie do zmiany sekund (liczby) na format ciągu (na przykład: 'mm: ss'):
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
Wpisz swoje sekundy zamiast „S” na przykład. I po prostu użyj „formattedSeconds” tam, gdzie potrzebujesz.
źródło