Отправить заявку

Аналог strftime на JavaScript

Довольно часто сталкиваешься с тем, что на одном языке есть прекрасная функция, которая в одну строку решает нужную задачу, а на другом языке такой функции нет и приходится писать аналог под конкретную задачу. Бывает очень нужно на JavaScript вывести дату или время в определенном формате как выводит функция на PHP strftime() но на JS ее нет.

Можно поискать готовые библиотеки, а проще написать собственную функцию, которая и работать будет быстрее любой универсальной (автор функции Шовчко Дмитрий).

Аналог strftime на JavaScript

function format_date() {
	var d = new Date();
	var dd = d.getDate();
	dd = ( dd < 10 ) ? '0' + dd : dd;
	var m = d.getMonth() + 1;
	mm = ( mm < 10 ) ? '0' + mm : mm;
	var yyyy = d.getFullYear();
	var ret = dd + '-' + mm + '-' + yyyy;

	return ret;
}

function format_time() {
	var d = new Date();
	var hh = d.getHours();
	hh = ( hh < 10 ) ? '0' + hh : hh;
	var mm = d.getMinutes();
	mm = ( mm < 10 ) ? '0' + mm : mm;
	var ss = d.getSeconds();
	ss = ( ss < 10 ) ? '0' + ss : ss;
	var ret = hh + ':' + mm + ':' + ss;

	return ret;
}

Две функции: format_date() – выводит дату, а format_time() – выводит время.

Вряд ли одновременно может понадобиться вывод дат и времени в разных форматах. Поэтому варианта с одной-двумя функциями более чем достаточно.

Если же нужна более универсальная функция, то можно использовать что-то вроде этого:

function formatDate(format_date, format_string)
{
    var yyyy = format_date.getFullYear();
    var yy = yyyy.toString().substring(2);
    var m = format_date.getMonth() + 1;
    var mm = m < 10 ? '0' + m : m;
    var d = format_date.getDate();
    var dd = d < 10 ? '0' + d : d;

    var H = format_date.getHours();
    var HH = H < 10 ? '0' + H : H;
    var M = format_date.getMinutes();
    var MM = M < 10 ? '0' + M : M;
    var S = format_date.getSeconds();
    var SS = S < 10 ? '0' + S : S;

    format_string = format_string.replace(/yyyy/i, yyyy);
    format_string = format_string.replace(/yy/i, yy);
    format_string = format_string.replace(/mm/i, mm);
    format_string = format_string.replace(/m/i, m);
    format_string = format_string.replace(/dd/i, dd);
    format_string = format_string.replace(/d/i, d);
    format_string = format_string.replace(/HH/i, HH);
    format_string = format_string.replace(/H/i, H);
    format_string = format_string.replace(/MM/i, MM);
    format_string = format_string.replace(/M/i, M);
    format_string = format_string.replace(/SS/i, SS);
    format_string = format_string.replace(/S/i, S);

    return format_string;
}

Date.prototype.format = function(format)
{
    return formatDate(this, format);
}

Использовать таким образом:

var d = new Date();
alert(d.format('mm.dd.yyyy'));
alert(d.format('d-m.yy'));
alert(d.format('HH:MM:SS'));
alert(d.format('H:M:S'));
Другие публикации