Полное руководство по датам в javascript

About the Author

hector rivas

Software Developer (Senior)
Texas Capital Bank

United States

Professional software engineer with 30+ years of experience delivering systems across diverse industries, looking for the next opportunity to deliver cutting edge end-to-end technology solutions.
Avid reader, disciplined writer and enthusiastic tinkerer with a background in electronics, looking inside and thinking outside the box, genuinely passionate about robust, extensible, reusable and performant code.
Framework developer leading, coaching and learning about best practices, code quality, DevOps and software and data lifecycle management with an agile mindset to create the most elegant and sustainable solutions.

Usage

As taken from Steven’s post, modified to match the Modifications listed above:

var dateFormat = require("dateformat");
var now = new Date();

// Basic usage
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
// Saturday, June 9th, 2007, 5:46:21 PM

// You can use one of several named masks
dateFormat(now, "isoDateTime");
// 2007-06-09T17:46:21

// ...Or add your own
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
dateFormat(now, "hammerTime");
// 17:46! Can't touch this!

// You can also provide the date as a string
dateFormat("Jun 9 2007", "fullDate");
// Saturday, June 9, 2007

// Note that if you don't include the mask argument,
// dateFormat.masks.default is used
dateFormat(now);
// Sat Jun 09 2007 17:46:21

// And if you don't include the date argument,
// the current date and time is used
dateFormat();
// Sat Jun 09 2007 17:46:22

// You can also skip the date argument (as long as your mask doesn't
// contain any numbers), in which case the current date/time is used
dateFormat("longTime");
// 5:46:22 PM EST

// And finally, you can convert local time to UTC time. Simply pass in
// true as an additional argument (no argument skipping allowed in this case):
dateFormat(now, "longTime", true);
// 10:46:21 PM UTC

// ...Or add the prefix "UTC:" or "GMT:" to your mask.
dateFormat(now, "UTC:h:MM:ss TT Z");
// 10:46:21 PM UTC

// You can also get the ISO 8601 week of the year:
dateFormat(now, "W");
// 42

// and also get the ISO 8601 numeric representation of the day of the week:
dateFormat(now, "N");
// 6

Mask options

Mask Description
Day of the month as digits; no leading zero for single-digit days.
Day of the month as digits; leading zero for single-digit days.
Day of the week as a three-letter abbreviation.
«Ysd», «Tdy» or «Tmw» if date lies within these three days. Else fall back to ddd.
Day of the week as its full name.
«Yesterday», «Today» or «Tomorrow» if date lies within these three days. Else fall back to dddd.
Month as digits; no leading zero for single-digit months.
Month as digits; leading zero for single-digit months.
Month as a three-letter abbreviation.
Month as its full name.
Year as last two digits; leading zero for years less than 10.
Year represented by four digits.
Hours; no leading zero for single-digit hours (12-hour clock).
Hours; leading zero for single-digit hours (12-hour clock).
Hours; no leading zero for single-digit hours (24-hour clock).
Hours; leading zero for single-digit hours (24-hour clock).
Minutes; no leading zero for single-digit minutes.
Minutes; leading zero for single-digit minutes.
ISO 8601 numeric representation of the day of the week.
GMT/UTC timezone offset, e.g. -0500 or +0230.
GMT/UTC timezone offset, e.g. -05:00 or +02:30.
Seconds; no leading zero for single-digit seconds.
Seconds; leading zero for single-digit seconds.
The date’s ordinal suffix (st, nd, rd, or th). Works well with .
Milliseconds; gives 3 digits.
Milliseconds; gives 2 digits.
Lowercase, single-character time marker string: a or p.
Lowercase, two-character time marker string: am or pm.
Uppercase, single-character time marker string: A or P.
Uppercase, two-character time marker string: AM or PM.
ISO 8601 week number of the year, e.g. 4, 42
ISO 8601 week number of the year, leading zero for single-digit, e.g. 04, 42
US timezone abbreviation, e.g. EST or MDT. For non-US timezones, the GMT/UTC offset is returned, e.g. GMT-0500
, Literal character sequence. Surrounding quotes are removed.
Must be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The «UTC:» prefix is removed.

Named Formats

Name Mask Example
Sat Jun 09 2007 17:46:21
6/9/07
06/09/2007
Jun 9, 2007
June 9, 2007
Saturday, June 9, 2007
5:46 PM
5:46:21 PM
5:46:21 PM EST
2007-06-09
17:46:21
2007-06-09T17:46:21+0700
2007-06-09T22:46:21Z

Localization

Day names, month names and the AM/PM indicators can be localized by
passing an object with the necessary strings. For example:

var dateFormat = require("dateformat");
dateFormat.i18n = {
  dayNames: 
    "Sun",
    "Mon",
    "Tue",
    "Wed",
    "Thu",
    "Fri",
    "Sat",
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
  ,
  monthNames: 
    "Jan",
    "Feb",
    "Mar",
    "Apr",
    "May",
    "Jun",
    "Jul",
    "Aug",
    "Sep",
    "Oct",
    "Nov",
    "Dec",
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December",
  ,
  timeNames: "a", "p", "am", "pm", "A", "P", "AM", "PM",
};

Breaking change in 2.1.0

  • 2.1.0 was published with a breaking change, for those using localized strings.
  • 2.2.0 has been published without the change, to keep packages refering to ^2.0.0 to continue working. This is now branch v2_2.
  • 3.0.* contains the localized AM/PM change.

Методы объекта FormData

С помощью указанных ниже методов мы можем изменять поля в объекте :

  • – добавляет к объекту поле с именем и значением ,
  • – добавляет поле, как будто в форме имеется элемент , третий аргумент устанавливает имя файла (не имя поля формы), как будто это имя из файловой системы пользователя,
  • – удаляет поле с заданным именем ,
  • – получает значение поля с именем ,
  • – если существует поле с именем , то возвращает , иначе

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

Ещё существует метод , его синтаксис такой же, как у . Разница в том, что удаляет все уже имеющиеся поля с именем и только затем добавляет новое. То есть этот метод гарантирует, что будет существовать только одно поле с именем , в остальном он аналогичен :

  • ,
  • .

Поля объекта можно перебирать, используя цикл :

Объект Date. Работа с датами

Объект Date позволяет работать с датами и временем в JavaScript.

Существуют различные способы создания объекта Date. Первый способ заключается в использовании пустого конструктора без параметров:

var currentDate = new Date();
document.write(currentDate);

В этом случае объект будет указывать на текущую дату компьютера:

Второй способ заключается в передаче в конструктор Date количества миллисекунд, которые прошли с начала эпохи Unix, то есть с 1 января 1970
года 00:00:00 GMT:

var myDate = new Date(1359270000000);
document.write(myDate); // Sun Jan 27 2013 10:00:00 GMT+0300 (RTZ 2 (зима))

Третий способ состоит в передаче в конструктор Date дня, месяца и года:

var myDate = new Date("27 March 2008");
// или так
// var myDate = new Date("3/27/2008");
document.write(myDate); // Thu Mar 27 2008 00:00:00 GMT+0300 (RTZ 2 (зима))

Если мы используем полное название месяца, то оно пишется в по-английски, если используем сокращенный вариант, тогда используется формат месяц/день/год.

Четвертый способ состоит в передаче в конструктор Date всех параметров даты и времени:

var myDate = new Date(2012,11,25,18,30,20,10); // Tue Dec 25 2012 18:30:20 GMT+0300 (RTZ 2 (зима))

В данном случае используются по порядку следующие параметры: .
При этом надо учитывать, что отсчет месяцев начинается с нуля, то есть январь — 0, а декабрь — 11.

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

Для получения различных компонентов даты применяется ряд методов:

  • getDate(): возвращает день месяца

  • getDay(): возвращает день недели (отсчет начинается с 0 — воскресенье, и последний день — 6 — суббота)

  • getMonth(): возвращает номер месяца (отсчет начинается с нуля, то есть месяц с номер 0 — январь)

  • getFullYear(): возвращает год

  • toDateString(): возвращает полную дату в виде строки

  • getHours(): возвращает час (от 0 до 23)

  • getMinutes(): возвращает минуты (от 0 до 59)

  • getSeconds(): возвращает секунды (от 0 до 59)

  • getMilliseconds(): возвращает миллисекунды (от 0 до 999)

  • toTimeString(): возвращает полное время в виде строки

Получим текущую дату:

var days = ;
var months = ;
			
var myDate = new Date();
var fullDate = "Сегодня: " + myDate.getDate() + " " + months + 
				" " + myDate.getFullYear() + ", " + days;
document.write(fullDate); // Сегодня: 18 Август 2015, Вторник

Перевести из числовых значений в более привычные названия для дней недели и месяцев используются массивы. Получив индекс дня недели ()
и индекс месяца () можно получить нужный элемент из массива.

Теперь получим текущее время:

var welcome;
var myDate = new Date();
var hour = myDate.getHours();
var minute = myDate.getMinutes();
var second = myDate.getSeconds();
if (minute < 10) {
	minute = "0" + minute;
}
if (second < 10) {
	second = "0" + second;
}
if (hour < 12) {
	welcome = "Доброе утро";
} else if (hour < 17) {
	welcome = "Добрый день";
} else {
	welcome = "Добрый вечер";
}
document.write(welcome + ", текущее время: " + hour + 
				":" + minute + ":" + second); // Добрый вечер, текущее время: 22:50:39

Установка даты и времени

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

  • setDate(): установка дня в дате

  • setMonth(): уставовка месяца (отсчет начинается с нуля, то есть месяц с номер 0 — январь)

  • setFullYear(): устанавливает год

  • setHours(): установка часа

  • setMinutes(): установка минут

  • setSeconds(): установка секунд

  • setMilliseconds(): установка миллисекунд

Установим дату:

var days = ;
var months = ;
			
var myDate = new Date();
myDate.setDate(15);
myDate.setMonth(6);
myDate.setYear(2013);

var fullDate = myDate.getDate() + " " + months + 
				" " + myDate.getFullYear() + ", " + days;
document.write(fullDate); // 15 Июль 2013, Понедельник

При установке значений мы можем передать величину, большую, чем максимальное допустимое значение. Например, установить для часа число 54:

myDate.setHour(54);

В этом случае значение часа будет равно 54 — 24 * 2 = 6, а оставшиеся часы будут составлять два дня (24 * 2), что прибавит к дате два дня. То же самое действует и
в отношении дней, минут, секунд, миллисекунд и месяцев.

НазадВперед

JS сравнение дат

В JavaScript для сравнения дат используются операторы , , и .

const earlier = new Date(2019, 0, 26)
const later = new Date(2019, 0, 27)
console.log(earlier < later) // true

Сложнее сравнить даты по времени суток (часам и минутам). Вы не сможете сравнить их с помощью или :

const a = new Date(2019, 0, 26)
const b = new Date(2019, 0, 26)

console.log(a == b) // false
console.log(a === b) // false

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

const isSameTime = (a, b) => {
  return a.getTime() === b.getTime()
}
const a = new Date(2019, 0, 26)
const b = new Date(2019, 0, 26)
console.log(isSameTime(a, b)) // true

Чтобы проверить, совпадают ли в датах дни недели, сравните их значения  с помощью методов , и .

const isSameDay = (a, b) => {
  return a.getFullYear() === b.getFullYear() &&
    a.getMonth() === b.getMonth() &&
    a.getDate()=== b.getDate()
}
const a = new Date(2019, 0, 26, 10) // 26 января 2019, 10:00
const b = new Date(2019, 0, 26, 12) // 26 января 2019, 12:00
console.log(isSameDay(a, b)) // true

Создание объекта Date с указанием нужной даты

Достаточно часто нам нужна именно сегодняшняя дата. Однако бывает необходимо получить дату из прошлого или из будущего, например, ваш день рождения (скажем, это 23 мая 1980 года) или 1 января следующего года, как в примере выше.  Давайте получим эти даты:

Объявление переменных с конкретной датой

JavaScript

let birthday = new Date(’05/23/1980′); //’месяц/число/год’
document.write(‘<p> <strong>birthday (23 мая 1980г.): </strong>’+ birthday +'</p>’);

let octDate= new Date(‘10.22.2021′);//’месяц.число.год’ //!!!не во всех браузерах работает
document.write(‘<p> <strong>octDate (22 октября 2021г.): </strong>’+ octDate +'</p>’);

let new_year= new Date(‘2021-01-01′);//’год-месяц-число’
document.write(‘<p> <strong>new_year (1 января 2021г.): </strong>’+new_year+'</p>’);

let war = new Date(‘June 22, 1941 04:01:00’);// месяц сокр. на англ. яз число, год
document.write(‘<p><strong> war (начало ВОВ)</strong>: ‘+war+'</p>’);

let learnDate = new Date(2020, 8, 1, 8, 0, 0); //год, месяц (начало — с 0 — январь), число, часы, минуты, секунды
document.write(‘<p><strong> learnDate (1 сентября 2020г.):</strong> ‘+learnDate +'</p>’);

let augDate = new Date(1598731320395);
document.write(‘<p><strong> augDate (дата в августе 2020г.):</strong> ‘+augDate +'</p>’);

let date1 = new Date(’12 22 20 15:00′);//месяц (от 1 до 12) день год часы:минуты:секунды
document.write(‘<p><strong> date1 (22 декабря 2020г.):</strong> ‘+date1 +'</p>’);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

let birthday=newDate(’05/23/1980′);//’месяц/число/год’

document.write(‘<p> <strong>birthday (23 мая 1980г.): </strong>’+birthday+'</p>’);

let octDate=newDate(‘10.22.2021′);//’месяц.число.год’ //!!!не во всех браузерах работает

document.write(‘<p> <strong>octDate (22 октября 2021г.): </strong>’+octDate+'</p>’);

let new_year=newDate(‘2021-01-01′);//’год-месяц-число’

document.write(‘<p> <strong>new_year (1 января 2021г.): </strong>’+new_year+'</p>’);

let war=newDate(‘June 22, 1941 04:01:00’);// месяц сокр. на англ. яз число, год

document.write(‘<p><strong> war (начало ВОВ)</strong>: ‘+war+'</p>’);

let learnDate=newDate(2020,8,1,8,,);//год, месяц (начало — с 0 — январь), число, часы, минуты, секунды

document.write(‘<p><strong> learnDate (1 сентября 2020г.):</strong> ‘+learnDate+'</p>’);

let augDate=newDate(1598731320395);

document.write(‘<p><strong> augDate (дата в августе 2020г.):</strong> ‘+augDate+'</p>’);

let date1=newDate(’12 22 20 15:00′);//месяц (от 1 до 12) день год часы:минуты:секунды

document.write(‘<p><strong> date1 (22 декабря 2020г.):</strong> ‘+date1+'</p>’);

Давайте посмотрим на вывод дат:

Метод Date.parse()

Для того чтобы вывести количество миллисекунд с 01.01.1970 до указанной даты можно использовать метод . Если вы задали дату неверно, как во второй строке, то метод вернет , т.к. здесь последовательность написания чисел в дате так же важна, как и при ее инициализации.

Date.parse()

JavaScript

Date.parse(’10 06 2021′); // месяц день год 06.10.2021
Date.parse(’10-06-2021′); // ошибка — неверный формат даты
Date.parse(‘2021-06-10′); // год-месяц-день 10.06.2021
Date.parse(’10/06/2021’); // месяц/день/год 06.10.2021

1
2
3
4

Date.parse(’10 06 2021′);// месяц день год  06.10.2021

Date.parse(’10-06-2021′);// ошибка — неверный формат даты

Date.parse(‘2021-06-10’);// год-месяц-день 10.06.2021

Date.parse(’10/06/2021′);// месяц/день/год  06.10.2021

Выводим данные, полученные методом :

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

Чтобы получить дату из другой даты, нужно:

  1. Установить конкретное значение даты/времени из другой даты.
  2. Добавить/вычесть отрезок времени из другой даты.

Установка конкретной даты / времени

Для этого можно использовать следующие методы:

  1. : устанавливает четырехзначный год по местному времени.
  2. : устанавливает месяц года по местному времени.
  3. : устанавливает день месяца по местному времени.
  4. : устанавливает часы по местному времени.
  5. : устанавливает минуты по местному времени.
  6. : устанавливает секунды по местному времени.
  7. : устанавливает миллисекунды по местному времени.

Например, если вы хотите задать дату для 15 числа месяца, вы можете использовать метод .

const d = new Date(2019, 0, 10)
d.setDate(15)
console.log(d) // 15 января 2019

Чтобы установить июнь месяц, примените метод :

const d = new Date(2019, 0, 10)
d.setMonth(5)
console.log(d) // 10 июня 2019

Методы установки значений даты изменяют исходный объект Date(). На практике лучше модифицировать отдельный экземпляр объекта.

const d = new Date(2019, 0, 10)
const newDate = new Date(d)
newDate.setMonth(5)
console.log(d) // 10 января 2019
console.log(newDate) // 10 июня 2019

Добавление/вычитание периода времени из другой даты

Чтобы добавить/вычесть период времени, нужно знать значение текущей даты. Его можно получить с помощью следующих методов:

  1. : возвращает четырехзначный год по местному времени.
  2. : возвращает месяц года (0-11) по местному времени.
  3. : возвращает день месяца (1-31) по местному времени.
  4. : возвращает часы (0-23) по местному времени.
  5. : возвращает минуты (0-59) по местному времени.
  6. : возвращает секунды (0-59) по местному времени.
  7. : возвращает миллисекунды (0-999) по местному времени.

Допустим, что вы хотите назначить свидание через три дня (начиная  с сегодняшнего дня). Предположим, что сегодня 28 марта 2019 года.

Первый подход (установка значения)

// Подразумеваем, что сегодня 28 марта 2019
const today = new Date(2019, 2, 28)

Сначала создаем новый объект Date (чтобы не изменять исходный экземпляр объекта):

const finalDate = new Date(today)

С помощью получаем значение, которое хотим изменить:

const currentDate = today.getDate()

Свидание произойдет через три дня. Поэтому добавляем их к текущей дате:

finalDate.setDate(currentDate + 3)

Полный код для первого подхода:

const today = new Date(2019, 2, 28)
const finalDate = new Date(today)
finalDate.setDate(today.getDate() + 3)
console.log(finalDate) // 31 марта 2019

Второй подход (создание новой даты)

Сначала используем , , и другие методы, пока не получим типа значения, которое мы изменить. Затем мы создаём искомую дату при помощи .

const today = new Date(2019, 2, 28)
// Получение нужных значений
const year = today.getFullYear()
const month = today.getMonh()
const day = today.getDate()
// Создание новой даты
const finalDate = new Date(year, month, day + 3)
console.log(finalDate) // 31 марта 2019

Оба подхода работают.

JS Учебник

JS ГлавнаяJS ВведениеJS Что? Где? Куда?JS ВыводJS ЗаявленияJS СинтаксисJS КомментарииJS ПеременныеJS ОператорыJS АрифметикаJS ПрисваиванияJS Типы данныхJS ФункцииJS ОбъектыJS СобытияJS СтрокиJS Методы строкJS ЧислаJS Методы чиселJS МассивыJS Методы массиваJS Сортировка массиваJS Итерация массиваJS Объекты датJS Формат датJS Метод получения датJS Метод набора датJS Математические…JS Случайные числаJS БулевыJS Сравнение…JS Заявления if…elseJS Заявление switchJS Цикл forJS Цикл whileJS Заявление break…JS Преобразование…JS Битовые…JS Регулярные выраженияJS ОшибкиJS ОбластьJS ПодъемныйJS СтрогийJS Ключевое слово thisJS Ключевое слово letJS КонстантыJS Функция стрелкиJS КлассыJS ОтладчикJS Руководство стиляJS ПрактикаJS Распространенные ошибкиJS ЭффективностьJS Зарезервированные словаJS ВерсииJS Версия ES5JS Версия ES6JS Версия 2016JS Версия 2017JS JSON

Синтаксис конструктора объекта

new Date(); // создает объект Date со значением, равным текущим дате и времени
new Date(value); // числовой аргумент
new Date(dateString); //строковый аргумент
new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds); // от 2 до 7 числовых аргументов

value - Integer
dateString - String
year, monthIndex, day, hours, minutes, seconds, milliseconds - Integer

Обратите внимание на то, что объекты Date могут быть созданы только путем вызова Date в качестве конструктора, в случае вызова в качестве обычной функции (без использования оператора new), то в качестве возвращаемого значения мы получим строку, а не объект Date. При таком вызове Date() (как функция — без оператора new) игнорирует любые переданные аргументы

В отличие от других типов объектов JavaScript, объекты Date не имеют литерального синтаксиса.

Конструктор Date(), вызванный без аргументов создаст объект Date со значением, которое будет соответствовать текущей дате и времени.

Если конструктору передается единственный числовой аргумент, то это значение используется как внутреннее числовое представление даты в миллисекундах. Это значение аналогично значению, которое возвращается с использованием метода getTime().

Если конструктору передается единственный строковый аргумент, то это значение рассматривается как строковое представление даты в формате, принимаемом методом parse().

Конструктору Date() допускается так же передать от двух до семи числовых аргументов, которые определяют индивидуальные настройки даты и времени

Используя этот синтаксис, обратите внимание на то, что все аргументы, кроме первых двух (год и месяц) не являются обязательными. Полное описание аргументов конструктора представлено ниже

Значение параметров

Параметр Описание
value Целое значение, представляющее количество миллисекунд с 00:00:00 1 января 1970 по UTC.
dateString Строковое значение, представляющее дату. Строка должна быть в формате, распознаваемом методом parse() (совместимые с IETF RFC 2822 временные метки, а также ISO8601).
year Целое значение, представляющее год. Значения от до 99 соответствуют годам с 1900 по 1999.
monthIndex Целое значение, представляющее месяц. Значение соответствует январю, а 11 декабрю.
day День месяца, заданный в виде целого значения от 1 до 31. Необязательный аргумент.
hours Часы, заданные в виде целого от (полночь) до 23 (11 часов вечера). Необязательный аргумент.
minutes Целое значение от до 59, представляющее минутный отрезок времени. Необязательный аргумент.
seconds Целое значение от до 59, представляющее секундный отрезок времени. Необязательный аргумент.
milliseconds Целое значение от до 999, представляющее миллисекундный отрезок времени. Необязательный аргумент.

Локаль

Локаль – первый и самый важный аргумент всех методов, связанных с интернационализацией.

Локаль описывается строкой из трёх компонентов, которые разделяются дефисом:

  1. Код языка.
  2. Код способа записи.
  3. Код страны.

На практике не всегда указаны три, обычно меньше:

  1. – русский язык, без уточнений.
  2. – английский язык, используемый в Англии ().
  3. – английский язык, используемый в США ().
  4. – китайский язык (), записываемый упрощённой иероглифической письменностью (), используемый в Китае.

Также через суффикс можно указать расширения локалей, например – тайский язык (), используемый в Таиланде (), с записью чисел тайскими буквами (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) .

Стандарт, который описывает локали – RFC 5464, языки описаны в IANA language registry.

Все методы принимают локаль в виде строки или массива, содержащего несколько локалей в порядке предпочтения.

Если локаль не указана или – берётся локаль по умолчанию, установленная в окружении (браузере).

– вспомогательная настройка, которую тоже можно везде указать, она определяет способ подбора локали, если желаемая недоступна.

У него два значения:

  • – означает простейший порядок поиска путём обрезания суффикса, например → → → локаль по умолчанию.
  • – использует встроенные алгоритмы и предпочтения браузера (или другого окружения) для выбора подходящей локали.

По умолчанию стоит .

Если локалей несколько, например то пытается подобрать наиболее подходящую локаль для первой из списка (китайская), если не получается – переходит ко второй (русской) и так далее. Если ни одной не нашёл, например на компьютере не совсем поддерживается ни китайский ни русский, то используется локаль по умолчанию.

Как правило, является здесь наилучшим выбором.

Displaying Dates

JavaScript will (by default) output dates in full text string format:

When you display a date object in HTML, it is automatically converted to a
string, with the method.

d = new Date();
document.getElementById(«demo»).innerHTML = d;

Same as:

d = new Date();
document.getElementById(«demo»).innerHTML = d.toString();

The method converts a date to a UTC string (a date display
standard).

var d = new Date();
document.getElementById(«demo»).innerHTML = d.toUTCString();

The method converts a date to a more readable
format:

var d = new Date();
document.getElementById(«demo»).innerHTML = d.toDateString();

The method converts a date to a string, using the ISO standard format:

Класс GregorianCalendar

КлассGregorianCalendar – конкретная реализация класса Calendar, отображающий обыкновенный григорианский календарь.

Метод getInstance() Calendar возвращает GregorianCalendar, который по умолчанию инициализирован текущей датой и временем, локализацией и часовым поясом. GregorianCalendar определяет 2 поля: н. э и до н. э. Это две эпохи, определяющиеся по григорианскому календарю.

Конструкторы для объектов GregorianCalendar:

Название конструктора Краткое описание
GregorianCalendar() Создает GregorianCalendar, используя текущей датой и временем, локализацией и часовым поясом по умолчанию.
GregorianCalendar(int year, int month, int date) Создает значение GregorianCalendar с учетом заданной даты в часовом поясе и локализацией по умолчанию.
GregorianCalendar(int year, int month, int date, int hour, int minute) Конструирует GregorianCalendar в соответствии с заданной датой и временем в часовом поясе и локализацией по умолчанию.
GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Конструирует GregorianCalendar в соответствии с заданной датой и временем в часовом поясе и локализацией по умолчанию.
GregorianCalendar(Locale aLocale) Формирует GregorianCalendar в соответствии с текущим временем в часовом поясе по умолчанию в рамках заданной локализации.
GregorianCalendar(TimeZone zone) Создает GregorianCalendar, основанный на текущем времени в данной зоне времени с локализацией по умолчанию.
GregorianCalendar(TimeZone zone, Locale aLocale) Формирует GregorianCalendar с учетом текущего времени в указанном часовом поясе и локализации.

Полезные методы класса GregorianCalendar:

Метод Описание
void add(int field, int amount) Добавляет указанное количество времени в данное временное поле в соответствии с правилами календаря.
protected void computeFields() Преобразует время по Гринвичу в миллисекунды до значения полей времени.
protected void computeTime() Преобразует значения временного поля Календаря в UTC формате в миллисекундах.
boolean equals(Object obj) Сравнивает этот GregorianCalendar эталонным объектом.
int get(int field) Получает значение для поля заданного времени.
int getActualMaximum(int field) Возвращает максимальное значение, которое это поле может иметь, учитывая текущую дату.
int getActualMinimum(int field) Возвращает минимальное значение, которое это поле может иметь, учитывая текущую дату.
int getGreatestMinimum(int field) Возвращает наибольшее минимальное значение для данного поля, если изменяется.
Date getGregorianChange() Получает изменения даты по григорианскому календарю.
int getLeastMaximum(int field) Возвращает минимально максимальное значение для данного поля, если изменяется.
int getMaximum(int field) Возвращает максимальное значение для данного поля.
Date getTime() Определяет текущее время в соответствии с календарем.
long getTimeInMillis() Получает текущее время по Календарю как длительное.
TimeZone getTimeZone() Возвращает часовой пояс.
int getMinimum(int field) Возвращает минимальное значение для данного поля.
int hashCode() Переопределите хэш-код.
boolean isLeapYear(int year) Определяет, является ли год високосным.
void roll(int field, boolean up) Добавление или вычитание (вверх/вниз) одной единицы времени в данном временном поле без изменений в больших полях.
void set(int field, int value) Устанавливает временное поле с заданным значением.
void set(int year, int month, int date) Задает значения для поля год, месяц и дата.
void set(int year, int month, int date, int hour, int minute) Задает значения для поля год, месяц, дату, час и минуту.
void set(int year, int month, int date, int hour, int minute, int second) Задает значения для поля год, месяц, дату, час, минуту и секунду.
void setGregorianChange(Date date) Устанавливает дату изменения грегорианского календаря.
void setTime(Date date) Устанавливает в соответствии с данным календарем текущее время с заданной датой.
void setTimeInMillis(long millis) Устанавливает в соответствии с данным календарем текущее время от заданного long значения.
void setTimeZone(TimeZone value) Задает часовой пояс со значением заданного часового пояса.
String toString() Возвращает строковое представление календаря.

Форматирование и вывод дат

Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.

Это делается вызовом , в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку.

Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:

Вы сможете подробно узнать о них в статье Intl: интернационализация в JavaScript, которая посвящена этому стандарту.

Методы вывода без локализации:

, ,
Возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод возвращает дату целиком, и – только дату и время соответственно.

То же самое, что , но дата в зоне UTC.

Возвращает дату в формате ISO Детали формата будут далее. Поддерживается современными браузерами, не поддерживается IE8-.

Если хочется иметь большую гибкость и кросс-браузерность, то также можно воспользоваться специальной библиотекой, например Moment.JS или написать свою функцию форматирования.

Итого

  • Дата и время в JavaScript представлены объектом Date. Нельзя создать «только дату» или «только время»: объекты всегда содержат и то, и другое.
  • Счёт месяцев начинается с нуля (да, январь – это нулевой месяц).
  • Дни недели в также отсчитываются с нуля, что соответствует воскресенью.
  • Объект самостоятельно корректируется при введении значений, выходящих за рамки допустимых. Это полезно для сложения/вычитания дней/месяцев/недель.
  • Даты можно вычитать, и разность возвращается в миллисекундах. Так происходит, потому что при преобразовании в число объект становится таймстампом.
  • Используйте для быстрого получения текущего времени в формате таймстампа.

Учтите, что, в отличие от некоторых других систем, в JavaScript таймстамп в миллисекундах, а не в секундах.

Порой нам нужно измерить время с большей точностью. Собственными средствами JavaScript измерять время в микросекундах (одна миллионная секунды) нельзя, но в большинстве сред такая возможность есть. К примеру, в браузерах есть метод performance.now(), возвращающий количество миллисекунд с начала загрузки страницы с точностью до микросекунд (3 цифры после точки):

В Node.js для этого предусмотрен модуль и ряд других способов. Технически почти любое устройство или среда позволяет добиться большей точности, просто её нет в объекте .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector