Итак, я хочу отобразить дату без особого внимания ко времени суток.С датой тоже ничего не мешает.У меня MacBook Pro.
Если я введу числа в конструктор Date, появится следующее:
Я хочу показать, например, 28 апреля 1993 года.
var objDate = new Date(1993, 3, 28),
dateString = objDate.toLocaleDateString(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
timeZoneName: 'long'
});
console.log(dateString)
//Chrome Outputs: "Wednesday, April 28, 1993, 12 AM Mountain Daylight Time"
//Firefox Outpus: "Tuesday, April 27, 1993, 6 PM Mountain Daylight Time"
let nowDate = new Date(1993, 3, 28);
console.log(nowDate.toString())
//Chrome Outputs: "Wed Apr 28 1993 00:00:00 GMT-0600 (Mountain Daylight Time)"
//Firefox Outputs: "Wed Apr 28 1993 00:00:00 GMT+0000 (UTC)"
console.log(nowDate.toLocaleString())
//Chrome Outputs: "4/28/1993, 12:00:00 AM"
//Firefox Outputs: "4/27/1993, 6:00:00 PM"
Так что теперь даты показывают и 27-е, и 28-е, хотя я хочу, чтобы это было только 28-е.
Но!Если я изменю числа на строковый формат, как в следующем коде.Это по-прежнему противоречиво.
var objDate = new Date("1993-04-28"),
dateString = objDate.toLocaleDateString(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
timeZoneName: 'long'
});
console.log(dateString)
//Chrome Outputs: "Wednesday, April 27, 1993, 12 AM Mountain Daylight Time"
//Firefox Outpus: "Tuesday, April 27, 1993, 6 PM Mountain Daylight Time"
let nowDate = new Date("1993-04-28");
console.log(nowDate.toString())
//Chrome Outputs: "Wed Apr 27 1993 00:00:00 GMT-0600 (Mountain Daylight Time)"
//Firefox Outputs: "Wed Apr 28 1993 00:00:00 GMT+0000 (UTC)"
console.log(nowDate.toLocaleString())
//Chrome Outputs: "4/27/1993, 12:00:00 AM"
//Firefox Outputs: "4/27/1993, 6:00:00 PM"
Теперь вот последний бит кода.
Если я введу время дня в строковом формате, например, в полдень, то получится нормально согласночтобы показать, какой сегодня день.
РЕДАКТИРОВАТЬ: Я только что проверил этот метод в Safari, и он выводит недопустимую дату.
var objDate = new Date("1993-04-28 12:00"),
dateString = objDate.toLocaleDateString(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
timeZoneName: 'long'
});
console.log(dateString)
//Chrome Outputs: "Wednesday, April 28, 1993, 12 PM Mountain Daylight Time"
//Firefox Outpus: "Wednesday, April 28, 1993, 6 AM Mountain Daylight Time"
let nowDate = new Date("1993-04-28");
console.log(nowDate.toString())
//Chrome Outputs: "Wed Apr 28 1993 12:00:00 GMT-0600 (Mountain Daylight Time)"
//Firefox Outputs: "Wed Apr 28 1993 12:00:00 GMT+0000 (UTC)"
console.log(nowDate.toLocaleString())
//Chrome Outputs: "4/28/1993, 12:00:00 PM"
//Firefox Outputs: "4/28/1993, 6:00:00 AM"
Итак, вот, в частности, вопросы.
Почему методы с разными вводами даты иногда задают другой день? Что браузеры делают по-разному в каждом из перечисленных случаев? Я думал, что каждый из используемых мной методов будет локальным, а не UTC.
РЕДАКТИРОВАТЬ: Возможно, мне просто нужноиспользуйте одну из библиотек только для обработки всех несоответствий.Хотя есть достаточно небольшая библиотека?Я нашел Dayjs, и он выглядит достаточно маленьким.
codepen sources