2017-02-19 5 views
0

Я использую эту превосходную функцию для HH: MM: SS, но как я могу ее изменить, чтобы возвращать только HH: MM с обеими секундами, усеченными или закругленными.Преобразование секунд в HH-MM с JavaScript?

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

Готовы ли вы использовать сторонние библиотеки? MomentJS является хорошим инструментом для обработки времени и дат. –

+0

Обратите внимание, что если секунды больше 1 дня, вы получите неправильное значение. – RobG

ответ

0

Проблема с использованием даты для форматирования секунд заключается в том, что она не может обрабатывать время более 24 часов и капризы дат. Просто переформатирование значение в соответствии с требованиями:

function formatSeconds(seconds) { 
 
    function z(n) {return (n < 10 ? '0' : '') + n;} 
 
    return z(seconds/3600 | 0) + ':' + z((seconds % 3600)/60 | 0) 
 
} 
 

 
// Some examples 
 
[0,1,61,3600,3660,765467].forEach(function (seconds) { 
 
    console.log(seconds + ' -> ' + formatSeconds(seconds)) 
 
});

Нет Дата, не регулярное выражение, нет библиотеки, нет зависимостей и работает в каждом хосте, который когда-либо поддерживаемого ECMAScript.

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

удалить последний \d{2} и добавить ? после первого *

0

Хотя идеальным способом было бы использовать moment.js, но если вы хотите использовать пользовательскую функцию, вы можете попробовать что-то вроде этого:

function formatSeconds(milliseconds, format) { 
 
    var dateObj = new Date(milliseconds); 
 

 
    function getDoubleDigits(value){ 
 
    return ("0" + value).slice(-2) 
 
    } 
 
    
 
    var o = { 
 
    DD: getDoubleDigits(dateObj.getDate()), 
 
    MM: getDoubleDigits(dateObj.getMonth() + 1), 
 
    YY: dateObj.getYear(), 
 
    YYYY: dateObj.getFullYear(), 
 
    hh: getDoubleDigits(dateObj.getHours()), 
 
    mm: getDoubleDigits(dateObj.getMinutes()), 
 
    ss: getDoubleDigits(dateObj.getSeconds()) 
 
    } 
 
    
 
    var dilimeter = format.match(/[^\w]/)[0]; 
 
    return format.split(dilimeter).map(function(f){ 
 
    return o[f]; 
 
    }).join(dilimeter); 
 
} 
 

 
var today = new Date(); 
 
console.log(formatSeconds(+today, "DD-MM-YYYY")) 
 
console.log(formatSeconds(+today, "hh:mm"))

+0

Почему момент .js был бы «идеальным»? Функция для создания требуемого формата - всего 2 строки кода. – RobG

+0

@RobG, потому что он обрабатывает намного больше, чем требуется. OP имеет дело со временем, поэтому он будет использовать эту функцию. Затем, если понадобится другой формат, он напишет еще одну функцию. Я попытался сделать универсальную функцию, но момент уже решил проблемы с датой, и в моем понимании переполнен переосмысление колеса. Да, использование момента только для этого случая также слишком велико, но, как предложение, я бы сказал, что момент лучше для обработки данных в течение времени – Rajesh

Смежные вопросы