d3-time-format
Этот модуль предоставляет реализацию на JavaScript функций strptime и strftime из стандартной библиотеки C, и может использоваться для парсинга или форматирования дат в различных представлених, специфичных для языка. Чтобы отформатировать дату, создайте форматер по спецификатору (строка с желаемыми форматом директив, обозначенных как %); затем передайте дату в форматировщик, который вернёт строку. Например, чтобы преобразовать текущую дату в читаемую человеком строку:
var formatTime = d3.timeFormat("%B %d, %Y");
formatTime(new Date); // "June 30, 2015" Также, чтобы преобразовать строку обратно в дату, создайте парсер:
var parseTime = d3.timeParse("%B %d, %Y");
parseTime("June 30, 2015"); // Tue Jun 30 2015 00:00:00 GMT-0700 (PDT) Вы также можете реализовать более сложные условные форматы времени. Например, вот формат времени с несколькими шкалами с использованием временных интервалов:
var formatMillisecond = d3.timeFormat(".%L"),
formatSecond = d3.timeFormat(":%S"),
formatMinute = d3.timeFormat("%I:%M"),
formatHour = d3.timeFormat("%I %p"),
formatDay = d3.timeFormat("%a %d"),
formatWeek = d3.timeFormat("%b %d"),
formatMonth = d3.timeFormat("%B"),
formatYear = d3.timeFormat("%Y");
function multiFormat(date) {
return (d3.timeSecond(date) < date ? formatMillisecond
: d3.timeMinute(date) < date ? formatSecond
: d3.timeHour(date) < date ? formatMinute
: d3.timeDay(date) < date ? formatHour
: d3.timeMonth(date) < date ? (d3.timeWeek(date) < date ? formatDay : formatWeek)
: d3.timeYear(date) < date ? formatMonth
: formatYear)(date);
} Этот модуль используется D3 временными шкалами для генерации удобочитаемых меток.
Установка
Если вы используете NPM, npm install d3-time-format. В противном случае, загрузите последнюю версию. Вы также можете загрузить напрямую с d3js.org, либо как самостоятельную библиотеку, либо как часть D3 4.0. Поддерживаются AMD, CommonJS и обычные среды. В обычной среде экспортируется d3 глобальная переменная:
<script src="https://d3js.org/d3-time.v1.min.js"></script>
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
<script>
var format = d3.timeFormat("%x");
</script> Файлы локали хранятся на unpkg и могут быть загружены с помощью d3.json. Например, чтобы установить русский язык в качестве языка по умолчанию:
d3.json("https://unpkg.com/d3-time-format@2/locale/ru-RU.json", function(error, locale) {
if (error) throw error;
d3.timeFormatDefaultLocale(locale);
var format = d3.timeFormat("%c");
console.log(format(new Date)); // понедельник, 5 декабря 2016 г. 10:31:59
}); Попробуйте d3-time-format в вашем браузере.
Справочник по API
d3.timeFormat(specifier) Source
Псевдоним для locale.format в по умолчанию локали.
d3.timeParse(specifier) Source
Псевдоним для locale.parse в по умолчанию локали.
d3.utcFormat(specifier) Source
Псевдоним для locale.utcFormat в по умолчанию локали.
d3.utcParse(specifier) Source
Псевдоним для locale.utcParse в по умолчанию локали.
d3.isoFormat Source
Полный форматировщик времени UTC по ISO 8601. При возможности, этот метод будет использовать Date.toISOString для форматирования.
d3.isoParse Source
Полный парсер времени UTC по ISO 8601. При возможности, этот метод будет использовать конструктор Date для парсинга строк. Если вы зависите от строгой валидации входного формата в соответствии с ISO 8601, вы должны создать функцию парсера UTC:
var strictIsoParse = d3.utcParse("%Y-%m-%dT%H:%M:%S.%LZ"); locale.format(specifier) Source
Возвращает новый форматировщик для данного строкового спецификатора. Строка спецификатора может содержать следующие директивны:
-
%a— сокращённое имя дня недели.* -
%A— полное имя дня недели.* -
%b— сокращённое имя месяца.* -
%B— полное имя месяца.* -
%c— дата и время локали, например%x, %X.* -
%d— день месяца с нулями слева в качестве десятичного числа [01,31]. -
%e— день месяца с пробелами слева в качестве десятичного числа [ 1,31]; эквивалентно%_d. -
%f— микросекунды в качестве десятичного числа [000000, 999999]. -
%H— час (24-часовой формат) в качестве десятичного числа [00,23]. -
%I— час (12-часовой формат) в качестве десятичного числа [01,12]. -
%j— день года в качестве десятичного числа [001,366]. -
%m— месяц в качестве десятичного числа [01,12]. -
%M— минута в качестве десятичного числа [00,59]. -
%L— миллисекунды в качестве десятичного числа [000, 999]. -
%p— AM или PM.* -
%Q— миллисекунды с момента эпохи UNIX. -
%s— секунды с момента эпохи UNIX. -
%S— секунда в качестве десятичного числа [00,61]. -
%u— день недели по понедельнику (ISO 8601) в качестве десятичного числа [1,7]. -
%U— неделя года по воскресенью в качестве десятичного числа [00,53]. -
%V— неделя года по ISO 8601 в качестве десятичного числа [01, 53]. -
%w— день недели по воскресенью в качестве десятичного числа [0,6]. -
%W— неделя года по понедельнику в качестве десятичного числа [00,53]. -
%x— дата локали, например%-m/%-d/%Y.* -
%X— время локали, например%-I:%M:%S %p.* -
%y— год без века в качестве десятичного числа [00,99]. -
%Y— год с веком в качестве десятичного числа. -
%Z— смещение часового пояса, например-0700,-07:00,-07, илиZ. -
%%— буквенный знак процента (%).
Директивы, помеченные звездочкой (*), могут быть подвержены влиянию определения локали.
Для %U, все дни в новом году, предшествующие первому воскресенью, считаются принадлежащими к неделе 0. Для %W, все дни в новом году, предшествующие первому понедельнику, считаются принадлежащими к неделе 0. Номера недель вычисляются с помощью interval.count. Например, 2015-52 и 2016-00 представляют понедельник, 28 декабря 2015 года, а 2015-53 и 2016-01 представляют понедельник, 4 января 2016 года. Это отличается от спецификации ISO week date (%V), которая использует более сложное определение!
Для %V, согласно странице man strftime:
В этой системе недели начинаются с понедельника и нумеруются от 01 для первой недели до 52 или 53 для последней недели. Неделя 1 — это первая неделя, в которой четыре или более дней попадают в новый год (или, синонимично, неделя 01 — это: первая неделя года, содержащая четверг; или неделя, в которой 4 января).
Знак % указывающий на директиву, может быть сразу после модификатора заполнения:
-
0— заполнение нулями -
_— заполнение пробелами -
-— отключение заполнения
Если модификатор заполнения не указан, значение по умолчанию — 0 для всех директив, кроме %e, значение по умолчанию для которой — _. (В некоторых реализациях strftime и strptime директива может включать необязательную ширину поля или точность; эта функция ещё не реализована.)
Возвращаемая функция форматирует указанную дату, возвращая соответствующую строку.
var formatMonth = d3.timeFormat("%B"),
formatDay = d3.timeFormat("%A"),
date = new Date(2014, 4, 1); // Thu May 01 2014 00:00:00 GMT-0700 (PDT)
formatMonth(date); // "May"
formatDay(date); // "Thursday" locale.parse(specifier) Source
Возвращает новый парсер для данного строкового спецификатора. Строка спецификатора может содержать те же директивы, что и locale.format. Директивы %d и %e считаются эквивалентными для парсинга.
Возвращаемая функция анализирует указанную строку, возвращая соответствующую дату или null, если строку нельзя обработать согласно спецификатору формата. Анализ строго: если указанная строка не точно соответствует связанному спецификатору, этот метод возвращает null. Например, если связанный спецификатор — %Y-%m-%dT%H:%M:%SZ, то строка "2011-07-01T19:15:28Z" будет обработана как ожидается, но "2011-07-01T19:15:28", "2011-07-01 19:15:28" и "2011-07-01" вернут null. (Обратите внимание, что буквальный Z здесь отличается от директивы смещения часового пояса %Z.) Если требуется более гибкий парсер, попробуйте последовательно несколько форматов, пока один не вернёт ненулевое значение.
locale.utcFormat(specifier) Source
Эквивалентно locale.format, за исключением того, что все директивы интерпретируются как Координированное универсальное время (UTC), а не местное время.
locale.utcParse(specifier) Source
Эквивалентно locale.parse, за исключением того, что все директивы интерпретируются как Координированное универсальное время (UTC), а не местное время.
Локали
d3.timeFormatLocale(definition) Source
Возвращает объект locale для указанного definition с методами locale.format, locale.parse, locale.utcFormat, locale.utcParse. definition должен содержать следующие свойства:
-
dateTime— спецификатор формата даты и времени (%c) (например,"%a %b %e %X %Y"). -
date— спецификатор формата даты (%x) (например,"%m/%d/%Y"). -
time— спецификатор формата времени (%X) (например,"%H:%M:%S"). -
periods— эквиваленты A.M. и P.M. (например,["AM", "PM"]). -
days— полные названия дней недели, начиная с воскресенья. -
shortDays— сокращённые названия дней недели, начиная с воскресенья. -
months— полные названия месяцев (начиная с января). -
shortMonths— сокращённые названия месяцев (начиная с января).
Пример см. в Локализованная ось времени II.
d3.timeFormatDefaultLocale(definition) Исходный код
Эквивалентно d3.timeFormatLocale, за исключением того, что также переопределяет d3.timeFormat, d3.timeParse, d3.utcFormat и d3.utcParse на новые методы локали locale.format, locale.parse, locale.utcFormat и locale.utcParse. Если вы не зададите локаль по умолчанию, она будет установлена по умолчанию в Английский (США).
Пример см. в Локализованная ось времени.
© 2010–2017 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-time-format