Исходя из вашего ответа на мой комментарий, я бы сказал, просто сохранить дату на основе времени локального сервера, а затем использовать JavaScript Date :: toLocaleString (), чтобы преобразовать ее в свой местный часовой пояс. Я написал статью об этом пару лет назад, которую вы можете найти здесь .
JS статьи был написан на MooTools, но с тех пор я переписал его с помощью jQuery, поэтому я покажу этот код.
Важные части:
При рендеринге в HTML используйте миллисекунды с начала эпохи.
<span class="dt"><!-- <%= blah.created_at_epoch_ms %> --><%= blah.created_at %></span>
Для чего требуется метод в вашей модели, определенный следующим образом:
def created_at_epoch_ms
self.created_at.to_i * 1000
end
JS для преобразования дат:
$(document).ready(function(){
$('span.dt').each(function(){
var date = new Date();
date.setTime(this.firstChild.data);
$(this).parent().text(date.toLocaleString());
});
});
Это должно преобразовать строку в местное время пользователя, и волшебство происходит в toLocaleString (). Единственный браузер, о котором я слышал, не реализует его, это Safari 2.0, который не должен вызывать особых проблем, так как я думаю, что большинство пользователей пошли дальше.
Я использую этот метод на моем сайте , и если вы посмотрите на исходный код страницы, вы увидите, что он делает. Фактический код, отправляемый в браузер, выглядит следующим образом:
<!-- 1243484521000 -->2009-05-28 04:22:01 UTC
Что конвертируется в моем браузере (центральное время) в
Wednesday, May 27, 2009 11:22:01 PM
Если у них включен JS, он примет значение узла комментария, преобразует его и заменит всю строку (включая время UTC) местным временем. Если JS отключен, они просто увидят время так, как его видит сервер.