- Оригинальный адрес:THE DEFINITIVE GUIDE TO JAVASCRIPT DATES
- Оригинальный автор:flaviocopes.com
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:CoderMing
- Корректор:IridescentMia,c6n
Работать с датами в 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,внешний интерфейс,задняя часть,блокчейн,товар,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.