Image

Category:

server time in javascript

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

Решение
Добавляем в конструктор метод, починяющий примус созданный экземпляр даты и возвращающий её
Date.prototype.getFixed = function() {
  if(typeof(this.server_time_delay)=='number') 
    this.setMilliseconds(this.getMilliseconds() + this.server_time_delay);

  return this;
};
Единожды получаем разницу (сервер-клиент) и сохраняем в конструкторе Date
// Smarty example
Date.prototype.server_time_delay = (new Date("{$smarty.now|date_format:'%m/%d/%Y %T'}") - new Date());
Готово к использованию
var fixed_date = new Date().getFixed();
alert(fixed_date);

ЗЫ Если негодяйский юзер балуется часами и это критично, то можно корректировать свойство server_time_delay с необходимой частотой.