Форматирование дат в Javascript
В js-библиотеке есть расширение core_date.js, позволяющее форматировать дату.
Подключение в PHP
Вызов в Javascript
формат - полный аналог формата функции date, за исключением формата T и e (символьное название таймзоны). Также поддерживаются расширенные форматы функции FormatDate.
Если есть символы, которые не должны быть отформатированы, то необходимо эти символы оформить слешами.
Если формат начинается с символа ^, то функция обрежет нули. Примеры:
15.04.12 13:00:00 => 15.04.12 13:00
00:01:00 => 00:01
4 may 00:00:00 => 4 may
01-01-12 00:00 => 01-01-12
дата - это либо timestamp в секундах (тип Number), либо объект класса Date. Иначе по умолчанию текущее время (new Date()). Примеры:
BX.date.format("d-m-Y H:i:s");
BX.date.format("j F Y H:i:s");
BX.date.format("^d-m-Y H:i:s");
BX.date.format("H:m:s \\m \\i\\s \\m\\o\\n\\t\\h");
BX.date.format("Hago | dago | sago | iago | mago | Yago", new Date(2007, 2, 1, 0, 0, 0));
BX.date.format("sago | iago", 1320271200);
Также как и FormatDate, BX.date.format может принимать массив форматов для вычисление вида "1 секунда назад", "2 минуты назад" и так далее.
var format = [
["tommorow", "tommorow, H:i:s"],
["s" , "sago"],
["H", "Hago"],
["d", "dago"],
["m100", "mago"],
["m", "mago"],
["-", ""]
];
BX.date.format(format, new Date(2007, 2, 1, 0, 0, 0));
Массив format состоит из элементов вида ["интервал формата", "формат"], где интервал формата определяет на каком интервале времени применится формат.
Массив format обрабатывается последовательно до первого совпадения.
Интервал времени определяется между указанной датой (первый параметр в BX.format.date) и текущей датой.
| --- | --- | Стандарные значения "интервал формата" | s | до 60 секунд | i | до 60 минут | H | до 24 часов | d | до 31 дня | m | до года | sN | до N секунд * | iN | до N минут * |
* - где N - это любое положительное число.
Рассмотрим пример:
var format = [
["-", "d.m.Y H:i:s"]
["s300" , "sago"],
["H", "Hago"],
["d", "dago"],
["m", "mago"]
];
BX.date.format(format, new Date(2007, 2, 2, 9, 58, 0), new Date(2007, 2, 2, 10, 0, 0)); //1
BX.date.format(format, new Date(2007, 2, 2, 0, 0, 0), new Date(2007, 2, 2, 10, 0, 0)); //2
BX.date.format(format, new Date(2007, 2, 1, 0, 0, 0), new Date(2007, 2, 2, 10, 0, 0)); //3
BX.date.format(format, new Date(2007, 2, 3, 0, 0, 0), new Date(2007, 2, 2, 10, 0, 0)); //4
Третий параметр в BX.date.format - это текущая дата (описание смотри ниже).
- "120 секунд назад", сработало ["s300" , "sago"], т.к интервал времени меньше 300 секунд
- "10 часов назад", сработало ["H", "Hago"], т.к интервал времени меньше 24 часов
- "1 сутки назад", сработало ["d", "dago"], т.к интервал времени меньше 31 дня
- "03.03.2007 00:00:00" сработало ["-", "d.m.Y H:i:s"], так указана дата в будущем
Для значения по умолчанию последним элементом можно указать пустой "интервал формата":
var format = [
["s" , "sago"],
["H", "Hago"],
["d", "dago"],
["m", "mago"],
["", "d.m.Y H:i:s"]
];
BX.date.format(format, new Date(2007, 2, 1, 0, 0, 0));
Полная сигнатура BX.date.format
текущая дата - дата (timestamp в секундах, либо объект класса Date), которая используется для вычислений типа "1 секунда назад", "2 года назад". Если не задано, по умолчанию new Date().
utc - дата в UTC. По умолчанию false. Если необходимо работать с датами в UTC.
Небольшая шпаргалка для соответствия серверного и клиентского кода:
time() = new Date()
mktime(...) = new Date(...)
gmmktime(...) = new Date(Date.UTC(...))
mktime(0,0,0, 1, 1, 1970) != 0 new Date(1970,0,1).getTime() != 0
gmmktime(0,0,0, 1, 1, 1970) == 0 new Date(Date.UTC(1970,0,1)).getTime() == 0
date("d.m.Y H:i:s") = BX.date.format("d.m.Y H:i:s")
gmdate("d.m.Y H:i:s") = BX.date.format("d.m.Y H:i:s", null, null, true);
BX.date.convertBitrixFormat
Функция конвертирует битрикс-формат даты в формат функции date. Форматы даты текущего сайта можно получить так: