Управление календарными датами и временем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:
Арифметические операции с датами и временемС помощью класса 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. Перевод времени между часовыми поясамиАрифметические операции с датами и временем пригодятся, если вы хотите преобразовать даты одного часового пояса в другой. Это делается методом 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);
|
|