Я думал, что дам вам обновление. Я принимал различные предложения по форматированию даты на стороне клиента (или, точнее, переформатировал ее). Как гугл-фураж, я поместил полное объяснение этого в конце этого поста.
Однако проблема в том, что Date.toLocaleString не принимает параметров для управления форматированием, и поэтому, в любом случае, в моей локали в США я получаю большую громоздкую строку "Суббота, 27 ноября 2010 г. 15:58:38 PM" Это Это слишком громоздко, я хочу компактный формат, как Сб 27/27/10 15:58 ", но нет способа контролировать его AFAIK.
Так что я собираюсь изменить, чтобы попытаться кэшировать часовой пояс в сеансе на основе ввода с различных ключевых страниц, публикующих смещение часового пояса, и включить возможность изменять tz в профиле пользователя. Это не приятно, но это лучшее, что я могу придумать. Как я уже сказал, это действительно должно быть включено в заголовки http браузера.
----- Форматирование на стороне клиента ------------
Итак, у меня есть такие ярлыки (в ListView FWIW):
<asp:Label ID="TimeLabel" runat="server" class="UTCTimeCell Hidden">
<%# Eval("when") %> UTC
</asp:Label>
Обратите внимание, что вы должны включить UTC для часового пояса, поскольку форматировщик ASP.NET по умолчанию его не включает. (Здесь я предполагаю, что вы сохраняете свои даты как UTC, что почти во всех случаях следует.) Примечание Скрытый - это стандартный класс css, который я использовал с display: none.
Затем я определяю следующие функции в моем утилите javascript (очевидно, я использую jQuery ...)
function timeFormatLocal(timeStr) {
var dt = new Date(timeStr);
return dt.toLocaleString();
}
function timeReformatLocal(selector) {
$(selector).each(function () {
$(this).html(timeFormatLocal($(this).html()));
});
}
тогда на моей странице готового события я использую что-то вроде этого:
timeReformatLocal(".UTCTimeCell");
$(".UTCTimeCell").removeClass("Hidden");
Это переформатирует эти ячейки меток в формат на основе локали.