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

внешний интерфейс JavaScript Программа перевода самородков редкоземельный

Работать с датами в JavaScript сложно. Пожалуйста, попробуйте изучить все функции и научиться их использовать.

введение

Использование дат на работе очень сложно. Независимо от навыков разработчика, это может быть довольно болезненно.

JavaScript через мощныйDateВстроенные объекты для обеспечения функциональности для работы с датами.

В этой статье не будет обсуждатьсяMoment.jsНа мой взгляд, это лучшая библиотека для работы с датами, и вы должны использовать ее для работы с датами в подавляющем большинстве случаев.

Объект даты

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

Хотя он названDate, но и манипулируетконкретное время(Примечание переводчика: смысл в том, что можно описать и минуты, и секунды).

Инициализировать объект Date

Мы инициализируем объект Date следующим образом:

new Date()

Это создаст объект Date, указывающий на текущий момент.

Внутри объект Date представляет количество миллисекунд, прошедших с 1 января 1970 года (UTC). Этот день (1 января 1970 года) очень важен, потому что, что касается компьютеров, именно с этого все и началось.

Возможно, вы знакомы с временными метками UNIX: они представляют количество секунд, прошедших с того дня, когда все знали (1 января 1970 г.).

Важно: Результатом временной метки UNIX являются «секунды», а результатом объекта Date JavaScript — «миллисекунды».

Если у нас есть временная метка UNIX, мы можем провести аналогию с объектом Date в JavaScript следующим образом:

const timestamp = 1530826365
new Date(timestamp * 1000)

Если мы передадим значение 0, мы получим объект даты JavaScript, представляющий 1 января 1970 года:

new Date(0)

Если мы передаем строку вместо числа, объект Date вызоветparseчтобы определить дату, которую вы хотите пройти. Например:

new Date('2018-07-22')
new Date('2018-07') //July 1st 2018, 00:00:00
new Date('2018') //Jan 1st 2018, 00:00:00
new Date('07/22/2018')
new Date('2018/07/22')
new Date('2018/7/22')
new Date('July 22, 2018')
new Date('July 22, 2018 07:22:13')
new Date('2018-07-22 07:22:13')
new Date('2018-07-22T07:22:13')
new Date('25 March 2018')
new Date('25 Mar 2018')
new Date('25 March, 2018')
new Date('March 25, 2018')
new Date('March 25 2018')
new Date('March 2018') //Mar 1st 2018, 00:00:00
new Date('2018 March') //Mar 1st 2018, 00:00:00
new Date('2018 MARCH') //Mar 1st 2018, 00:00:00
new Date('2018 march') //Mar 1st 2018, 00:00:00

Этот метод очень гибкий. Вы можете добавлять или опускать начальные нули в полях месяца или дня.

Будьте осторожны с размещением месяца/даты, иначе вы можете перепутать месяц с датой.

вы также можете использоватьDate.parseметод:

Date.parse('2018-07-22')
Date.parse('2018-07') //July 1st 2018, 00:00:00(译者注:此处的结果为一个时间戳数字,该数字代表 July 1st 2018, 00:00:00 时刻)
Date.parse('2018') //Jan 1st 2018, 00:00:00(译者注:意思同上)
Date.parse('07/22/2018')
Date.parse('2018/07/22')
Date.parse('2018/7/22')
Date.parse('July 22, 2018')
Date.parse('July 22, 2018 07:22:13')
Date.parse('2018-07-22 07:22:13')
Date.parse('2018-07-22T07:22:13')

Date.parseМетод вернет метку времени (в миллисекундах) вместо объекта Date.

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

new Date(2018, 6, 22, 7, 22, 13, 0)
new Date(2018, 6, 22)

Этот метод требует как минимум три аргумента, но большинство движков JavaScript также могут анализировать меньшее количество аргументов:

new Date(2018, 6) //Sun Jul 01 2018 00:00:00 GMT+0200 (Central European Summer Time)
new Date(2018) //Thu Jan 01 1970 01:00:02 GMT+0100 (Central European Standard Time)

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

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

Подводя итог, вы можете создать объект Date четырьмя способами:

  • не передавать никаких параметров, который создаст объект Date, указывающий на «текущий момент»
  • передачачисло, который будет представлять количество миллисекунд, прошедших с 00:00 (GMT) 1 января 1970 года для созданного объекта Date.
  • передачаСтрока, которая должна быть строкой, описывающей дату
  • передачастрока параметров, эти параметры будут соответственно описывать часть объекта Date

Часовой пояс

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

Вы можете описать часовой пояс, добавив формат +ЧАСЫ или имя часового пояса, заключенное в круглые скобки:

new Date('July 22, 2018 07:22:13 +0700')
new Date('July 22, 2018 07:22:13 (CET)')

Если вы используете имя neutline, но определяете ошибку в круглых скобках, JavaScript молча установит часовой пояс на значение UTC по умолчанию.

Если вы используете метод +HOURS и передаете число в неправильном формате, JavaScript выдаст ошибку «Неверная дата».

Преобразование даты и форматирование

Имея объект Date, существует множество способов генерации строки, связанной с этим временем.

const date = new Date('July 22, 2018 07:22:13')

date.toString() // "Sun Jul 22 2018 07:22:13 GMT+0200 (Central European Summer Time)"
date.toTimeString() //"07:22:13 GMT+0200 (Central European Summer Time)"
date.toUTCString() //"Sun, 22 Jul 2018 05:22:13 GMT"
date.toDateString() //"Sun Jul 22 2018"
date.toISOString() //"2018-07-22T05:22:13.000Z" (ISO 8601 format)
date.toLocaleString() //"22/07/2018, 07:22:13"
date.toLocaleTimeString()	//"07:22:13"
date.getTime() //1532236933000
date.getTime() //1532236933000

получить метод объекта Date

Объект Date предоставляет следующие методы для просмотра его значения. Эти значения будут зависеть от часового пояса, в котором находится ваш компьютер.

const date = new Date('July 22, 2018 07:22:13')

date.getDate() //22
date.getDay() //0(0 表示周日,1 表示周一...)
date.getFullYear() //2018
date.getMonth() //6(从 0 开始计)
date.getHours() //7
date.getMinutes() //22
date.getSeconds() //13
date.getMilliseconds() //0(未标明)(译者注:此处的意思为 Date 对象创建时指定毫秒值,JavaScript 默认将毫秒数设置为 0)
date.getTime() //1532236933000
date.getTimezoneOffset() //-120(将会取决于你在哪和你查看的时间 — 例子中的值表示在 CET 时区的夏天)。返回以分钟表示的时间差(译者注:此处涉及到协调世界时及夏令时)

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

date.getUTCDate() //22
date.getUTCDay() //0(0 表示周日,1 表示周一...)
date.getUTCFullYear() //2018
date.getUTCMonth() //6(从 0 开始计)
date.getUTCHours() //5(看吧,不是上面的结果“7”)
date.getUTCMinutes() //22
date.getUTCSeconds() //13
date.getUTCMilliseconds() //0(未标明)

Изменить дату

Объект Date предоставляет следующие методы для изменения значения Date:

const date = new Date('July 22, 2018 07:22:13')

date.setDate(newValue)
date.setDay(newValue)
date.setFullYear(newValue) //note:不要使用 setYear(),它已经被废弃了
date.setMonth(newValue)
date.setHours(newValue)
date.setMinutes(newValue)
date.setSeconds(newValue)
date.setMilliseconds(newValue)
date.setTime(newValue)
date.setTimezoneOffset(newValue)

setDayа такжеsetMonthДиапазон значений начинается с 0, например, значение марта равно 2.

Забавный факт: эти методы перекрывают друг друга, например, если вы запуститеdate.setHours(48), что также увеличивает количество дат.

Отличное знание: вы можетеsetHours()Добавьте более одного параметра для установки минут, секунд и миллисекунд:setHours(0, 0, 0, 0)- это относится и кsetMinutesа такжеsetSeconds. (Примечание переводчика:setMinutesМинуты, секунды и миллисекунды могут быть установлены,setSecondsСекунды и миллисекунды могут быть установлены)

Как и метод get, метод set имеет ту же версию UTC:

const date = new Date('July 22, 2018 07:22:13')

date.setUTCDate(newalue)
date.setUTCDay(newValue)
date.setUTCFullYear(newValue)
date.setUTCMonth(newValue)
date.setUTCHours(newValue)
date.setUTCMinutes(newValue)
date.setUTCSeconds(newValue)
date.setUTCMilliseconds(newValue)

Получить правильную метку времени

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

Date.now()

Этот способ сложнее:

new Date().getTime()

JavaScript делает все возможное, чтобы код работал

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

new Date(2018, 6, 40) //Thu Aug 09 2018 00:00:00 GMT+0200 (Central European Summer Time)

Это работает одинаково хорошо для месяцев, часов, минут, секунд и миллисекунд.

Формат даты в зависимости от вашего местоположения

Глобальный API в современных браузераххорошо поддерживается(Заметное исключение: UC Browser), и это позволяет вам конвертировать даты (по всему миру).

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

МыIntl.DateTimeFormat()очень заинтересован.

Вот как это использовать:

Отформатируйте объект Date в соответствии с региональными настройками компьютера:

// "12/22/2017"
const date = new Date('July 22, 2018 07:22:13')
new Intl.DateTimeFormat().format(date) //"22/07/2018" 是我所在地区的格式

Отформатируйте объект Date в соответствии с разными локалями:

new Intl.DateTimeFormat('en-US').format(date) //"7/22/2018"

Intl.DateTimeFormatМетод имеет необязательный параметр для настройки вывода. Вот как отображать часы, минуты и секунды одновременно:

const options = {
  year: 'numeric',
  month: 'numeric',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric'
}

new Intl.DateTimeFormat('en-US', options).format(date) //"7/22/2018, 7:22:13 AM"
new Intl.DateTimeFormat('it-IT', options2).format(date) //"22/7/2018, 07:22:13"

Вот ссылка на ваши доступные параметры.

Сравните две даты

ты можешь пройтиDate.getTime()value для сравнения двух объектов Date:

const date1 = new Date('July 10, 2018 07:22:13')
const date2 = new Date('July 22, 2018 07:22:13')
const diff = date2.getTime() - date1.getTime() //以毫秒计的差距

Таким же образом вы также можете проверить, равны ли два объекта Date:

const date1 = new Date('July 10, 2018 07:22:13')
const date2 = new Date('July 10, 2018 07:22:13')
if (date2.getTime() === date1.getTime()) {
  // 它们相等时所执行的代码
}

Запомнить,getTime()Метод возвращает число в миллисекундах, поэтому при сравнении необходимо учитывать время суток.July 10, 2018 07:22:13 не равно July 10, 2018. В этом случае вы можете использоватьsetHours(0, 0, 0, 0)для сброса времени суток.

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.

Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,товар,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.