Работа с датами в Ext JS 4

Последнее обновление: 1.11.2015

Для работы с датами в Ext JS имеется класс Ext.Date, который расширяет функциональность стандартного объекта JavaScript Datе.

Мы можем использовать стандартный объект Date для задания даты:

var date = new Date(2012, 10, 22, 16, 15);

Дополнительная функциональность, которую привносит ExtJS в данном случае состоит в том, что мы можем форматировать дату в соответствии с любым определенным нами шаблоном и выделять из нее нужную информацию.

Чтобы вывести дату в определенном формате, нам надо представить шаблон вывода. Для задания шаблонов вывода дат используется объект Ext.Date.patterns:

Ext.Date.patterns={
	ISO8601Long: "d-m-Y H:i:sP",
	ISO8601Short:"d-m-Y",
	ShortDate: "j/n/y",
	FullDateTime: "l, F d, Y g:i:s A",
	LongTime: "g:i:s A",
	SortableDateTime: "d-m-Y\ H:i:s",
	UniversalSortableDateTime: "Y-m-d H:i:sO", 
	CustomFormat: "H:i d-m"
};

В данном случае мы определили различные форматы вывода времени и каждому присвоили определенной шаблон. Например, шаблон "H:i d-m" показывает дату в формате "Час-Минуты День-Месяц", где H - это часы от 00 до 23 (есть еще формат h, также представляющий часы в 12-ти часовом формате - от 01 до 12), i - минуты от 00 до 59.

Все возможные определения форматов можно найти в официальной документации: Ext.Date.

Используя функцию Ext.Date.format, мы можем привести дату к определенному нами выше шаблону. Например, определим некоторую дату и выведем ее на панель:

Ext.onReady(function(){
	var date = new Date(2012, 10, 22, 16, 15);
	Ext.Date.patterns={
		ISO8601Long: "d-m-Y H:i:sP",
		ISO8601Short:"d-m-Y",
		ShortDate: "j/n/y",
		FullDateTime: "l, F d, Y g:i:s A",
		LongTime: "g:i:s A",
		SortableDateTime: "d-m-Y\ H:i:s",
		UniversalSortableDateTime: "Y-m-d H:i:sO", 
		CustomFormat: "H:i d-m"
	};
	
	var time = "<p><b>ISO8601Long</b>: "+Ext.Date.format(date, Ext.Date.patterns.ISO8601Long) + 
	   "</p><p><b>ISO8601Short</b>: " + Ext.Date.format(date, Ext.Date.patterns.ISO8601Short) +
	   "</p><p><b>ShortDate</b>:    " + Ext.Date.format(date, Ext.Date.patterns.ShortDate) +
	   "</p><p><b>FullDateTime</b>: " + Ext.Date.format(date, Ext.Date.patterns.FullDateTime) +
	   "</p><p><b>SortableDateTime</b>: " + Ext.Date.format(date, Ext.Date.patterns.SortableDateTime) +
	   "</p><p><b>UniversalSortableDateTime</b>: " + Ext.Date.format(date, Ext.Date.patterns.UniversalSortableDateTime) +
	   "</p><p><b>CustomFormat</b>: " + Ext.Date.format(date, Ext.Date.patterns.CustomFormat);

	var pannel=Ext.create('Ext.Panel', {
            title: 'Приложение Ext JS 4',
			html:time,
			width: 400,
			height: 250,
			renderTo: Ext.getBody()
        });	
});

В результате мы получим следующий вывод:

Однако, как видно из изображения, у нас есть небольшая проблемка - полная дата отображает английские названия дня и месяца, что для приложения на другом языке было бы нежелательно. Но ExtJS позволяет решить эту проблему, переопределив названия дней и месяцев с помощью свойств Ext.Date.monthNames и Ext.Date.dayNames:

Ext.onReady(function(){
    var date = new Date(2012, 10, 22, 16, 15);
    Ext.Date.patterns={
        ISO8601Long: "d-m-Y H:i:sP",
        ISO8601Short:"d-m-Y",
        ShortDate: "j/n/y",
        FullDateTime: "l, F d, Y g:i:s A",
        LongTime: "g:i:s A",
        SortableDateTime: "d-m-Y\ H:i:s",
        UniversalSortableDateTime: "Y-m-d H:i:sO",
        CustomFormat: "H:i d-m"
    };
	Ext.Date.monthNames = ['Январь','Февраль','Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
	Ext.Date.dayNames = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
    var time = "<p><b>Локализованная дата</b>: " + Ext.Date.format(date, Ext.Date.patterns.FullDateTime) + "</p>";
 
    var pannel=Ext.create('Ext.Panel', {
            title: 'Приложение Ext JS 4',
            html:time,
            width: 400,
            height: 150,
            renderTo: Ext.getBody()
        });
});

Теперь у нас уже будет локализованная дата:

Парсинг дат

Кроме использования шаблонов для получения полной даты мы можем применять функцию Ext.Data.parse():

var time="<p>" + Ext.Date.parse("20-11-2012", "d-m-Y") +"</p>";
//результат: Tue Nov 20 2012 00:00:00 GMT+0300

Метод Ext.Data.parse() принимает три параметра. Первый представляет дату в виде строки, а второй представляет шаблон, который показывает, как парсить строку в первом параметре. Третий необязательный параметр, который представляет булевое значение true или false. Третий параметр показывает точность форматирования времени. Например, код Ext.Date.parse("30-02-2012", "d-m-Y", false) вернет значение "Thu Mar 01 2012 00:00:00 GMT+0300", так как в не существует 30-го февраля, и фреймворк перенесет дату на следующий день - то есть на 1 марта. Но если бы мы использовали в качестве третьего параметра true, то выражение вернуло бы null.

Операции над датами

ExtJS представляет ряд методов для управления датами. Так. с помощью метода Ext.Date.between мы можем узнать находится ди дата в определенном временном промежутке:

Ext.Date.between(new Date('07/01/2011'), new Date('05/01/2011'), new Date('09/01/2011')));
//результат: true, так как первая дата находится в промежутке между второй и третьей

Метод Ext.Date.add добавляет к дате указанное количество дней/месяцев/лет. Передавая отрицательное значение, мы можем вычесть из даты определенное количество времени

var date =Ext.Date.add(new Date('09/30/2011'), Ext.Date.MONTH, -3);
//результат: Thu Jun 30 2011 00:00:00 GMT+0300 - то есть из 9-го месяца вычли 3 = июнь

Первый параметр этой функции представляет дату, над которой проводим операцию. Второй параметр - константу, обозначающую тип временного промежутка. Имеются следующие типы:

  • Ext.Date.DAY
  • Ext.Date.HOUR
  • Ext.Date.MILLI
  • Ext.Date.MINUTE
  • Ext.Date.SECOND
  • Ext.Date.YEAR
  • Ext.Date.MONTH

С помощью метода Ext.Date.defaultFormat можно установить формат для вывода даты в соответствии с текущей локалью. Например:

Ext.Date.defaultFormat='d/m/Y';

С помощью метода Ext.Date.getGMTOffset можно узнать смещение некоторой даты относительно времени по гринвичу. Например, выражение var offset =Ext.Date.getGMTOffset(new Date()); выдаст значение "+0300", поскольку время в моем часовом поясе смещено относительно Гринвича на 3 часа.

Метод Ext.Date.getElapsed(Date dateA, [Date dateB]) позволяет получить количество миллисекунд прошедших между двумя датами. Если второй параметр не указан, то в качестве него по умолчанию используется текущая дата и время.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850