Есть проблема с разницей во времени при .getHours(). Пусть есть дата 2019-09-20T15:20:23Z. При получении от этой даты .getHours() я получаю значение 18. При получении часов от 2019-09-20T15:20:23.000 я получаю значение 15. Как влияет "Z", как это исправить средствами самого JS (никаких сторонних библиотек) и как получать верное значение часов. Мне нужно получать конкретно то значение, которое указано в дате, без этой разницы в 3 часа.
Z - указывает, что время в UTC. Если Z отсутствует, то считается, что время местное. Поэтому при наличии Z у Вас добавляется разница между UTC и Вашим часовым поясом.
Чтобы избежать путаницы, Вы можете все значения даты и времени:
Подробнее тут.
Для более удобной работы с датой и временем (особенно с учётом часовых поясов) лучше использовать moment.js, а не работать с ними напрямую.
Часть Z обозначает временную зону – в формате +-hh:mm, либо символ Z, обозначающий UTC. По стандарту её можно не указывать, тогда UTC, но в Safari с этим ошибка, так что лучше указывать всегда.
Например:
var msUTC = Date.parse('2012-01-26T13:51:50.417Z');
var ms = Date.parse('2012-01-26T13:51:50.417-07:00');
Взято с отсюда
Сборка персонального компьютера от Artline: умный выбор для современных пользователей