Вы должны вручную определить разницу часовых поясов в вашем коде. Это сложно, потому что время по Гринвичу отличается от времени UTC (зулу). GMT включает изменение для летнего времени, в то время как UTC не имеет летнего времени и в остальном является тем же представлением часового пояса.
Дополнительная путаница заключается в том, что не все политические зоны определяют свои часовые пояса, чтобы они варьировались, например, на количество часов. В Индии UTC + 5,5 часов, а в Афганистане UTC + 4,5 часа. Обратите внимание, что в качестве базы используется UTC, а не GMT, поскольку эти страны не отмечают переход на летнее время. Некоторые малые островные государства в юго-западной части Тихого океана могут варьироваться в течение четверти часа.
Тогда некоторые политические определения часовых поясов имеют внутреннюю дифференциацию. Обычно считается, что Аризона находится в часовом поясе США в Тихом океане, по Гринвичу - 8 часов, за исключением того, что она не наблюдает за переходом на летнее время, поэтому пол года она находится в часовом поясе США в горах, поскольку Аризона действительно является UTC - 8.
При всей этой путанице существуют сотни определений часовых поясов, и некоторые из них меняются по мере изменения политических границ. Я просто говорю, прикрутите его и используйте либо время пользователя, либо время UTC, динамически настраивая константу в вашем JavaScript с сервера, чтобы отразить известное значение, которое представляет время UTC, когда пользователь запросил страницу.