Javascript дата объекта на основе чего - PullRequest
0 голосов
/ 06 января 2020

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

    var currentdate = new Date();
    return (currentdate.getDate() + "/"
            + (currentdate.getMonth()+1)  + "/"
            + currentdate.getFullYear() + " @ "
            + currentdate.getHours() + ":"
            + currentdate.getMinutes() + ":"
            + currentdate.getSeconds());

Мой вопрос: откуда currentdate получает время? Захватывает ли он время с центрального сервера? Будет ли какой-либо пользователь из любой точки земного шара выполнять вышеуказанные коды в одно и то же время, получит одно и то же значение?

Или это для каждого пользователя, то есть, если два пользователя из разных часовых поясов будут выполнять коды одновременно , они получат время на основе своего часового пояса, поэтому коды возвращают разные значения?

Ответы [ 6 ]

2 голосов
/ 06 января 2020

В предоставленном вами коде первая строка:

var currentdate = new Date();

Конструктор объекта Date вызывается без каких-либо параметров и поэтому инициализируется с отметкой времени, имеющей то же значение, что и Date.now(). Это значение Unix отметка времени , содержащее миллисекунды с 1970-01-01 00:00:00.000 UTC (без учета високосных секунд). Это строго UT C на основе. Часовой пояс системы не участвует в построении, а объект Date не хранит системный часовой пояс.

В него вовлечены только системные часы . Каждая компьютерная система имеет внутренние часы, которые могут возвращать текущее время UT C. Эти часы чаще всего синхронизируются с часами других компьютеров через NTP, PPTP или аналогичные механизмы. Это зависит от компьютера, хотя. Например, если настроено «автоматическое установление времени», компьютеры Windows будут получать время либо с сервера NTP publi c на Inte rnet, либо с контроллера домена в локальной сети, в зависимости от сети. конфигурации. Однако автономный компьютер, который не настроен на автоматическую установку времени, может иметь очень разные значения часов.

Таким образом, два данных компьютера, вызывающих new Date() (или Date.now()), будут вероятными получить аналогичные значения, если их часы синхронизированы правильно, но не гарантировано. Нет никакого сетевого вызова, только вызов на локальные системные часы.

В остальном коде вы вызываете функции getMonth, getFullYear, getHours, getMinutes и getSeconds. Каждый из этих вызовов функций будет независимо использовать метку времени на основе UT C объекта Date и часовой пояс, настроенный на компьютере, на котором выполняется код. Если код выполняется в веб-браузере, то применяется часовой пояс компьютера пользователя. Если код выполняется на сервере, то применяется часовой пояс сервера.

Опять же, важно помнить, что объект Date отслеживает только одно значение цифры c - миллисекунды с эпохи Unix (без учета високосных секунд). Вы можете увидеть это значение напрямую, вызвав d.getTime() или d.valueOf() объекта Date (здесь он называется d), или приведя значение к Number, как в +d. Часовой пояс не является частью состояния объекта и не выполняет сетевые вызовы самостоятельно.

2 голосов
/ 06 января 2020

Это основано на отметке времени Unix и будет основываться на времени компьютеров пользователей, если запрашивается на стороне клиента, или отметке времени сервера, если запрашивается на стороне сервера.

Подробнее см.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

0 голосов
/ 06 января 2020

Javascript Дата выполняется на стороне клиента! Так что да, каждый пользователь будет видеть свое машинное время и его спецификацию c Часовой пояс. Даже если у пользователя неправильное время на его компьютере, он увидит его неправильно.

Исключение возвращает время сервера, когда вы используете, например, Node.js. В этом случае местное время будет временем сервера. Опять же, на серверах обычно время и часовые пояса следуют настройкам времени ОС.

Если вы ожидаете, что все они увидят одно и то же время, например, отображение: «Время в Лондоне 10:13 вечера»

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

0 голосов
/ 06 января 2020

Javascript запускается в веб-браузере, поэтому потребуется время на компьютере пользователя. Так что, если ваши пользователи сидят в другом часовом поясе, они увидят другое время.

0 голосов
/ 06 января 2020

По данным mdn, точная дата / час зависит от вашего компьютера. Более подробная информация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours

0 голосов
/ 06 января 2020

Прежде всего, это очень хороший вопрос. Многие разработчики используют дату, но никогда не беспокоятся о том, как она работает. Да, это машина, на которой работает двигатель JavaScript, так что да, это зависит и от часового пояса. См .: https://javascript.info/date

...