Управление календарными датами и временем

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Все функции управления датами и временем в ActionScript 3.0 собраны в классе верхнего уровня Date. В классе Date содержатся методы и свойства, позволяющие обрабатывать даты и время в формате UTC или в формате местного часового пояса. UTC — это стандартное время, равное гринвичскому (GMT).

Создание объектов Date

Из всех ключевых классов класс Date обладает одним из наиболее гибких методов конструкторов. Его можно вызвать четырьмя способами.

Во-первых, если у конструктора Date() нет параметров, он возвращает объект, содержащий текущие дату и время по местному часовому поясу. Вот пример:

var now:Date = new Date();

Во-вторых, если у конструктора Date() только один числовой параметр, то им исчисляется количество миллисекунд с 1 января 1970 г., в результате чего метод возвращает соответствующий объект Date. Обратите внимание, что значение в миллисекундах — это количество миллисекунд с 1 января 1970 г. в формате UTC. Тем не менее, объект Date выводит значения по местному времени, кроме случаев, когда используются методы вывода значений в формате UTC. При создании нового объекта Date с помощью единственного параметра milliseconds не забывайте о разнице между своим часовым поясом и UTC. Следующие инструкции создают объект Date, установленный на полночь 1 января 1970 г. в формате UTC:

var millisecondsPerDay:int = 1000 * 60 * 60 * 24; 
// gets a Date one day after the start date of 1/1/1970 
var startTime:Date = new Date(millisecondsPerDay);

В-третьих, в конструктор Date() можно передавать несколько числовых параметров. Он распознает в этих параметрах соответственно год, месяц, число, час, минуту, секунду и миллисекунду и возвращает нужный объект Date. Эти параметры ввода считаются по местному времени, а не UTC. Следующие инструкции получают объект Date, установленный на полночь 1 января 2000 г. по местному времени:

var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0);

В-четвертых, можно передать конструктору Date() единую строку-параметр. Он будет пытаться разобрать эту строку на компоненты даты и времени, а затем возвратить соответствующий объект Date. При использовании этого подхода рекомендуется включать конструктор Date() в блок try..catch для отлавливания ошибок разбора. Конструктор Date() принимает различные форматы строк (они перечислены в cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform ). Следующая инструкция инициализирует новый объект Date с помощью строкового значения:

var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

Если конструктору Date() не удается разобрать строку-параметр, он не генерирует исключение. Тем не менее, получившийся объект Date будет содержать неверное значение даты.

Получение значений даты и времени

Значение разных единиц времени можно извлечь из объекта Date с помощью свойств или методов класса Date. Каждое из следующих свойств возвращает значение единицы времени из объекта Date:

  • свойство fullYear ;

  • свойство month , обозначаемое числами от 0 до 11, где 0 — это январь, а 11 — декабрь;

  • свойство date , обозначаемое числом календарного дня от 1 до 31;

  • свойство day , обозначающее день недели в числовом формате, начиная с 0 (воскресенье);

  • свойство hours в диапазоне от 0 до 23;

  • свойство minutes ;

  • свойство seconds ;

  • свойство milliseconds .

    В действительности класс Date предлагает несколько способов получения этих значений. Например, значение месяца из объекта Date можно получить четырьмя разными методами:

  • свойство month ;

  • метод getMonth() ;

  • свойство monthUTC ;

  • метод getMonthUTC() .

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

    Перечисленные свойства представляют компоненты значения даты в целом. Например, свойство milliseconds не может быть больше 999, потому что при достижении им значения 1000 значение seconds возрастает на 1, а свойство milliseconds сбрасывается до 0.

    Если вам нужно получить значение объекта Date в миллисекундах с 1 января 1970 года (UTC), можно воспользоваться методом getTime() . Схожий с ним метод setTime() позволяет изменять значение существующего объекта Date в миллисекундах с 1 января 1970 года (UTC).

Арифметические операции с датами и временем

С помощью класса Date можно складывать и вычитать даты и время. Значения дат хранятся в миллисекундах, поэтому перед сложением или вычитанием необходимо перевести остальные значения в миллисекунды.

Если в вашем приложении планируется часто выполнять арифметические действия с датами и временем, вам может быть полезно создать константы, содержащие общие значения единиц времени в миллисекундах:

public static const millisecondsPerMinute:int = 1000 * 60; 
public static const millisecondsPerHour:int = 1000 * 60 * 60; 
public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24;

Выполнять арифметические операции с датами, используя стандартные единицы времени, будет гораздо проще. В приведенном ниже коде значение даты устанавливается на один час вперед от текущего времени с помощью методов getTime() и setTime() .

var oneHourFromNow:Date = new Date(); 
oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour);

Еще один способ задать значение даты и времени — создать новый объект Date только с помощью параметра milliseconds. Например, в приведенном ниже коде для вычисления одной даты к другой прибавляется 30 дней.

// sets the invoice date to today's date 
var invoiceDate:Date = new Date(); 
 
// adds 30 days to get the due date 
var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay));

Далее, константа millisecondsPerDay умножается на 30 для получения 30 дней, а результат добавляется к значению invoiceDate и используется для установки значения dueDate .

Рекомендации Adobe

2 - 1 = 2 in math operations with dates in ActionScript (в математических операциях с датами в ActionScript 2 - 1 = 2)

JabbyPanda

Перевод времени между часовыми поясами

Арифметические операции с датами и временем пригодятся, если вы хотите преобразовать даты одного часового пояса в другой. Это делается методом getTimezoneOffset() , который возвращает значение в минутах, соответствующее разнице между часовым поясом объекта Date и UTC. Он возвращает значение в минутах, потому что не все пояса отличаются строго на час: для некоторых разница с соседними поясами составляет полчаса.

В примере ниже показано, как использовать смещение между часовыми поясами для преобразования даты из местного времени в UTC. Для преобразования сначала вычисляется значение часового пояса в миллисекундах, а потом значение Date изменяется на эту величину:

// creates a Date in local time 
var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); 
 
// converts the Date to UTC by adding or subtracting the time zone offset 
var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000; 
nextDay.setTime(nextDay.getTime() + offsetMilliseconds);