Поиск…
Синтаксис
- новая дата ();
- новая дата (значение);
- новая дата (dateAsString);
- новая дата (год, месяц [, день [, час [, минута [, секунда [, миллисекунда]]]]]);
параметры
| параметр | подробности | 
|---|---|
| value | Число миллисекунд с 1 января 1970 года 00: 00: 00.000 UTC (эпоха Unix) | 
| dateAsString | Дата, отформатированная как строка (см. Примеры для получения дополнительной информации) | 
| year | Значение года. Обратите внимание, что monthтакже должен быть предоставлен, или значение будет интерпретироваться как количество миллисекунд. Также обратите внимание, что значения от0до99имеют особое значение. См. Примеры. | 
| month | Месяц, в диапазоне 0-11. Обратите внимание, что использование значений за пределами указанного диапазона для этого и следующих параметров не приведет к ошибке, а скорее приведет к тому, что результирующая дата «перевернется» к следующему значению. См. Примеры. | 
| day | Необязательно: дата в диапазоне 1-31. | 
| hour | Дополнительно: час, в диапазоне 0-23. | 
| minute | Дополнительно: минута, в диапазоне 0-59. | 
| second | Дополнительно: второй, в диапазоне 0-59. | 
| millisecond | Дополнительно: миллисекунда, в диапазоне 0-999. | 
Получить текущее время и дату
 Используйте new Date() для создания нового объекта Date содержащего текущую дату и время. 
 Обратите внимание, что Date() вызываемая без аргументов, эквивалентна new Date(Date.now()) . 
 Когда у вас есть объект даты, вы можете применить любой из нескольких доступных методов для извлечения его свойств (например, getFullYear() чтобы получить 4-значный год). 
Ниже приведены некоторые общие методы даты.
Получить текущий год
var year = (new Date()).getFullYear();
console.log(year);
// Sample output: 2016 
Получить текущий месяц
var month = (new Date()).getMonth();
console.log(month);
// Sample output: 0 
 Обратите внимание, что 0 = январь. Это потому, что месяцы варьируются от 0 до 11 , поэтому часто желательно добавить +1 к индексу. 
Получить текущий день
var day = (new Date()).getDate();
console.log(day);
// Sample output: 31
Получить текущий час
var hours = (new Date()).getHours();
console.log(hours);
// Sample output: 10
Получить текущие минуты
var minutes = (new Date()).getMinutes();
console.log(minutes);
// Sample output: 39
Получить текущие секунды
var seconds = (new Date()).getSeconds();
console.log(second);
// Sample output: 48
Получить текущие миллисекунды
 Чтобы получить миллисекунды (от 0 до 999) экземпляра объекта Date , используйте метод getMilliseconds . 
var milliseconds = (new Date()).getMilliseconds();
console.log(milliseconds);
 // Output: milliseconds right now
Преобразование текущего времени и даты в удобочитаемую строку
var now = new Date();
// convert date to a string in UTC timezone format:
console.log(now.toUTCString());
// Output: Wed, 21 Jun 2017 09:13:01 GMT
 Статический метод Date.now() возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Чтобы получить количество миллисекунд, прошедших с того времени, используя экземпляр объекта Date , используйте его метод getTime . 
// get milliseconds using static method now of Date
console.log(Date.now());
// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());
Создать новый объект Date
 Чтобы создать новый объект Date используйте конструктор Date() : 
- без аргументов - Date()создает экземпляр- Dateсодержащий текущее время (до миллисекунды) и дату.
- с одним целым аргументом - Date(m)создает экземпляр- Dateсодержащий время и дату, соответствующие времени Epoch (1 января 1970 UTC) плюс- mмиллисекунд. Пример:- new Date(749019369738)дает дату Sun, 26 Sep 1993 04:56:09 GMT .
- с аргументом строки - Date(dateString)возвращает объект- Dateкоторый возникает после разбора- dateStringс помощью- Date.parse.
- с двумя или более целыми аргументами - Date(i1, i2, i3, i4, i5, i6)считывает аргументы как год, месяц, день, часы, минуты, секунды, миллисекунды и создает экземпляр соответствующего объекта- Date. Обратите внимание, что месяц индексируется 0 в JavaScript, поэтому 0 означает январь и 11 означает декабрь. Пример:- new Date(2017, 5, 1)выдается 1 июня 2017 года .
Изучение дат
 Обратите внимание, что эти примеры были созданы в браузере в Центральном часовом поясе США во время дневного времени, о чем свидетельствует код. Если сравнение с UTC было поучительным, Date.prototype.toISOString() использовался для отображения даты и времени в UTC (Z в форматированной строке обозначает UTC). 
// Creates a Date object with the current date and time from the 
// user's browser
var now = new Date();
now.toString() === 'Mon Apr 11 2016 16:10:41 GMT-0500 (Central Daylight Time)' 
// true
// well, at the time of this writing, anyway
// Creates a Date object at the Unix Epoch (i.e., '1970-01-01T00:00:00.000Z')
var epoch = new Date(0);
epoch.toISOString() === '1970-01-01T00:00:00.000Z' // true
// Creates a Date object with the date and time 2,012 milliseconds 
// after the Unix Epoch (i.e., '1970-01-01T00:00:02.012Z').
var ms = new Date(2012); 
date2012.toISOString() === '1970-01-01T00:00:02.012Z' // true
// Creates a Date object with the first day of February of the year 2012 
// in the local timezone.
var one = new Date(2012, 1);
one.toString() === 'Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)' 
// true
// Creates a Date object with the first day of the year 2012 in the local 
// timezone.
// (Months are zero-based) 
var zero = new Date(2012, 0);
zero.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)' 
// true
// Creates a Date object with the first day of the year 2012, in UTC.
var utc = new Date(Date.UTC(2012, 0));
utc.toString() === 'Sat Dec 31 2011 18:00:00 GMT-0600 (Central Standard Time)'
// true
utc.toISOString() === '2012-01-01T00:00:00.000Z'
// true
// Parses a string into a Date object (ISO 8601 format added in ECMAScript 5.1)
// Implementations should assumed UTC because of ISO 8601 format and Z designation
var iso = new Date('2012-01-01T00:00:00.000Z');
iso.toISOString() === '2012-01-01T00:00:00.000Z' // true
// Parses a string into a Date object (RFC in JavaScript 1.0)
var local = new Date('Sun, 01 Jan 2012 00:00:00 -0600');
local.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true
// Parses a string in no particular format, most of the time. Note that parsing
// logic in these cases is very implementation-dependent, and therefore can vary
// across browsers and versions.
var anything = new Date('11/12/2012'); 
anything.toString() === 'Mon Nov 12 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true, in Chrome 49 64-bit on Windows 10 in the en-US locale. Other versions in 
// other locales may get a different result.
// Rolls values outside of a specified range to the next value.
var rollover = new Date(2012, 12, 32, 25, 62, 62, 1023);
rollover.toString() === 'Sat Feb 02 2013 02:03:03 GMT-0600 (Central Standard Time)'
// true; note that the month rolled over to Feb; first the month rolled over to 
// Jan based on the month 12 (11 being December), then again because of the day 32
// (January having 31 days).
// Special dates for years in the range 0-99
var special1 = new Date(12, 0);
special1.toString() === 'Mon Jan 01 1912 00:00:00 GMT-0600 (Central Standard Time)`
// true
// If you actually wanted to set the year to the year 12 CE, you'd need to use the
// setFullYear() method:
special1.setFullYear(12);
special1.toString() === 'Sun Jan 01   12 00:00:00 GMT-0600 (Central Standard Time)`
// true
Конвертировать в JSON
var date1 = new Date();
date1.toJSON();
Возвращает: «2016-04-14T23: 49: 08.596Z»
Создание даты с UTC
 По умолчанию объект Date создается как локальное время. Это не всегда желательно, например, при передаче даты между сервером и клиентом, которые не находятся в одном и том же часовом поясе. В этом случае никто не хочет беспокоиться о часовых поясах вообще, пока дата не должна отображаться в локальное время, если это вообще требуется. 
Эта проблема
В этой задаче мы хотим сообщить конкретную дату (день, месяц, год) кому-то в другой часовой пояс. Первая реализация наивно использует местное время, что приводит к неправильным результатам. Вторая реализация использует даты UTC, чтобы избежать часовых поясов, где они не нужны.
Наивный подход с результатами WRONG
function formatDate(dayOfWeek, day, month, year) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}
//Foo lives in a country with timezone GMT + 1
var birthday = new Date(2000,0,1);
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
      birthday.getMonth(), birthday.getFullYear()));
sendToBar(birthday.getTime());
Пример вывода:
Foo was born on: Sat Jan 1 2000
//Meanwhile somewhere else...
//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
      birthday.getMonth(), birthday.getFullYear()));
Образец вывода:
Foo was born on: Fri Dec 31 1999
И таким образом, Бар всегда верит, что Foo родился в последний день 1999 года.
Правильный подход
function formatDate(dayOfWeek, day, month, year) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}
//Foo lives in a country with timezone GMT + 1
var birthday = new Date(Date.UTC(2000,0,1));
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(),
      birthday.getUTCMonth(), birthday.getUTCFullYear()));
sendToBar(birthday.getTime());
Пример вывода:
Foo was born on: Sat Jan 1 2000
//Meanwhile somewhere else...
//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(), 
      birthday.getUTCMonth(), birthday.getUTCFullYear()));
Пример вывода:
Foo was born on: Sat Jan 1 2000
Создание даты с UTC
 Если вы хотите создать объект Date на основе UTC или GMT, можно использовать метод Date.UTC(...) . Он использует те же аргументы, что и самый длинный конструктор Date . Этот метод вернет число, представляющее время, прошедшее с 1 января 1970 года, 00:00:00 по UTC. 
console.log(Date.UTC(2000,0,31,12));
Пример вывода:
949320000000
var utcDate = new Date(Date.UTC(2000,0,31,12));
console.log(utcDate);
Образец вывода:
Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))
Неудивительно, что разница между временем UTC и местным временем является, по сути, смещением часового пояса, преобразованным в миллисекунды.
var utcDate = new Date(Date.UTC(2000,0,31,12));
var localDate = new Date(2000,0,31,12);
console.log(localDate - utcDate === utcDate.getTimezoneOffset() * 60 * 1000);
Пример вывода:
true
Изменение объекта Date
 Все модификаторы объекта Date , такие как setDate(...) и setFullYear(...) имеют эквивалент, принимают аргумент в UTC, а не в локальное время. 
var date = new Date();
date.setUTCFullYear(2000,0,31);
date.setUTCHours(12,0,0,0);
console.log(date);
Образец вывода:
Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))
 Другими модификаторами UTC являются .setUTCMonth() , .setUTCDate() (для дня месяца), .setUTCMinutes() , .setUTCSeconds() и .setUTCMilliseconds() . 
Избегая двусмысленности с getTime () и setTime ()
Если вышеприведенные методы должны различать двусмысленность в датах, обычно проще сообщить дату как время, прошедшее с 1 января 1970 года, 00:00:00 по UTC. Это единственное число представляет собой единую точку во времени и может быть преобразовано в локальное время, когда это необходимо.
var date = new Date(Date.UTC(2000,0,31,12));
var timestamp = date.getTime();
//Alternatively
var timestamp2 = Date.UTC(2000,0,31,12);
console.log(timestamp === timestamp2);
Пример вывода:
true
//And when constructing a date from it elsewhere...
var otherDate = new Date(timestamp);
//Represented as an universal date
console.log(otherDate.toUTCString());
//Represented as a local date
console.log(otherDate);
Пример вывода:
Mon, 31 Jan 2000 12:00:00 GMT Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))
Преобразование в строковый формат
Преобразовать в строку
var date1 = new Date();
date1.toString();
Возвращает: «Пт 15 апреля 2016 07:48:48 GMT-0400 (Восточное дневное время)»
Преобразование в строку времени
var date1 = new Date();
date1.toTimeString();
Возвращает: «07:48:48 GMT-0400 (Восточное дневное время)»
Преобразование в строку даты
var date1 = new Date();
date1.toDateString();
Возврат: «Чт 14 апр 2016»
Преобразование в строку UTC
var date1 = new Date();
date1.toUTCString();
Возвращает: «Пт, 15 апр 2016 11:48:48 GMT»
Преобразование в строку ISO
var date1 = new Date();
date1.toISOString();
Возвращает: «2016-04-14T23: 49: 08.596Z»
Преобразовать в GMT String
var date1 = new Date();
date1.toGMTString();
Возвращает: «Чт, 14 апр 2016 23:49:08 GMT»
Эта функция отмечена как устаревшая, поэтому некоторые браузеры могут ее не поддерживать в будущем. Вместо этого предлагается использовать toUTCString ().
Преобразовать в строку даты локали
var date1 = new Date();
date1.toLocaleDateString();
Возврат: "4/14/2016"
Эта функция возвращает по умолчанию локальную строку даты, основанную на местоположении пользователя.
date1.toLocaleDateString([locales [, options]])
может использоваться для предоставления определенных локалей, но специфична для браузера. Например,
date1.toLocaleDateString(["zh", "en-US"]);
попытается напечатать строку в китайском языке, используя английский язык в качестве резервной копии. Параметр options может использоваться для обеспечения конкретного форматирования. Например:
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
date1.toLocaleDateString([], options);
приведет к
«Четверг, 14 апреля 2016 года».
Более подробную информацию см. В MDN .
Увеличение объекта даты
Чтобы увеличить объекты даты в Javascript, мы обычно можем это сделать:
var checkoutDate = new Date();    // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)
checkoutDate.setDate( checkoutDate.getDate() + 1 );
console.log(checkoutDate); // Fri Jul 22 2016 10:05:13 GMT-0400 (EDT)
 Можно использовать setDate для изменения даты на день в следующем месяце, используя значение, большее, чем количество дней в текущем месяце - 
var checkoutDate = new Date();    // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)
checkoutDate.setDate( checkoutDate.getDate() + 12 );
console.log(checkoutDate); // Tue Aug 02 2016 10:05:13 GMT-0400 (EDT)
То же самое относится к другим методам, таким как getHours (), getMonth () и т. Д.
Добавление рабочих дней
 Если вы хотите добавить рабочие дни (в этом случае я setDate понедельника по пятницу), вы можете использовать функцию setDate хотя вам нужна небольшая дополнительная логика для учета выходных дней (очевидно, это не учитывает национальные праздники) - 
function addWorkDays(startDate, days) {
    // Get the day of the week as a number (0 = Sunday, 1 = Monday, .... 6 = Saturday)
    var dow = startDate.getDay();
    var daysToAdd = days;
    // If the current day is Sunday add one day
    if (dow == 0)
        daysToAdd++;
    // If the start date plus the additional days falls on or after the closest Saturday calculate weekends
    if (dow + daysToAdd >= 6) {
        //Subtract days in current working week from work days
        var remainingWorkDays = daysToAdd - (5 - dow);
        //Add current working week's weekend
        daysToAdd += 2;
        if (remainingWorkDays > 5) {
            //Add two days for each working week by calculating how many weeks are included
            daysToAdd += 2 * Math.floor(remainingWorkDays / 5);
            //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks
            if (remainingWorkDays % 5 == 0)
                daysToAdd -= 2;
        }
    }
    startDate.setDate(startDate.getDate() + daysToAdd);
    return startDate;
}
Получить количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC
 Статический метод Date.now возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Чтобы получить количество миллисекунд, прошедших с того времени, используя экземпляр объекта Date , используйте его метод getTime . 
// get milliseconds using static method now of Date
console.log(Date.now());
// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());
Форматирование даты JavaScript
Форматирование даты JavaScript в современных браузерах
 В современных браузерах (*) Date.prototype.toLocaleDateString() позволяет вам определять форматирование Date удобным образом. 
Он требует следующего формата:
dateObj.toLocaleDateString([locales [, options]])
 Параметр locales должен быть строкой с тегом языка BCP 47 или массивом таких строк. 
 Параметр options должен быть объектом с некоторыми или всеми из следующих свойств: 
-  localeMatcher : возможные значения: "lookup"и"best fit"; по умолчанию"best fit"
-  timeZone : единственные значения, которые должны быть реализованы, - это "UTC"; по умолчанию используется временной диапазон времени выполнения
-  hour12 : возможные значения: trueиfalse; значение по умолчанию зависит от языка
-  formatMatcher : возможные значения являются "basic"и"best fit"; по умолчанию"best fit"
-  будний день : возможные значения "narrow","short"и"long"
-  эпоха : возможные значения "narrow","short"и"long"
-  год : возможные значения: "numeric"и"2-digit"
-  месяц : возможные значения: "numeric","2-digit","narrow","short"и"long"
-  день : возможные значения: "numeric"и"2-digit"
-  час : возможные значения являются "numeric"и"2-digit"
-  минута : возможные значения: "numeric"и"2-digit"
-  во-вторых : возможные значения: "numeric"и"2-digit"
-  timeZoneName : возможные значения: "short"&"long"
Как пользоваться
var today = new Date().toLocaleDateString('en-GB', {  
    day : 'numeric',
    month : 'short',
    year : 'numeric'
});
Вывод, если он исполняется 24 января 2036 года:
'24 Jan 2036'
Переход на заказ
 Если Date.prototype.toLocaleDateString() недостаточно гибко, чтобы выполнить любую необходимую вам потребность, возможно, вам стоит подумать о создании настраиваемого объекта Date, который выглядит следующим образом: 
var DateObject = (function() {
    var monthNames = [
      "January", "February", "March",
      "April", "May", "June", "July",
      "August", "September", "October",
      "November", "December"
    ];
    var date = function(str) {
        this.set(str);
    };
    date.prototype = {
        set : function(str) {
            var dateDef = str ? new Date(str) : new Date();
            this.day = dateDef.getDate();
            this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
            this.month = dateDef.getMonth() + 1;
            this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
            this.monthName = monthNames[this.month - 1];
            this.year = dateDef.getFullYear();
        },
        get : function(properties, separator) {
            var separator = separator ? separator : '-'
                ret = [];
            for(var i in properties) {
                ret.push(this[properties[i]]);
            }
            return ret.join(separator);
        }
    };
    return date;
})();
 Если вы включили этот код и выполнили new DateObject() 20 января 2019 года, он создаст объект со следующими свойствами: 
day: 20
dayPadded: "20"
month: 1
monthPadded: "01"
monthName: "January"
year: 2019
Чтобы получить форматированную строку, вы можете сделать что-то вроде этого:
new DateObject().get(['dayPadded', 'monthPadded', 'year']);
Это даст следующий результат:
20-01-2016
(*) Согласно MDN , «современные браузеры» означает Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ и Safari ночной сборки