Это очень неприятная проблема.Пока пользователь представлен в своем часовом поясе (или в GMT), у вас не будет проблем.Но просить JS предоставить точные локальные значения летнего времени для разных языков - это неприятно.Браузер знает время по Гринвичу и местное время и (благодаря ОС) он также знает, когда DST запускается локально.Но, не изменяя информацию о часовом поясе системы пользователя, JS не может определить, когда DST вступает в действие в другой локали.Правила вступления в силу ТЛЧ отличаются не только от страны к стране, дата может неожиданно измениться со временем (помните, когда страны Северной Америки недавно перенесли даты ТЛЧ?).Скорее всего, вы можете довольно легко выяснить локаль DST на вашем сервере и сообщить об этом браузеру.Но, вероятно, не практично пытаться сделать это полностью в браузере.В вашем приложении может быть своего рода массив DST_changeover_by_locale, но вам нужно будет периодически обновлять его.
[РЕДАКТИРОВАТЬ] Кажется, есть некоторая путаница о том, как объект JS Date работает в отношении часовых поясов.Вот несколько полезных моментов:
Смещения часовых поясов
// Create a time in winter (Standard time)
dt = new Date('Jan 1 2010 12:00:00 GMT-0000');
alert(dt.getTimezoneOffset());
// In Japan right now, users would see "-540"
// In New York right now, users would see "300"
// Create a time in summer (DST)
dt = new Date('Jul 1 2010 12:00:00 GMT-0000');
alert(dt.getTimezoneOffset());
// In Japan right now, users would see "-540"
// In New York right now, users would see "240"
// NOTE: Japan has no DST while NY does
Разбор дат по местному времени
// The following will all return the same time string, which will be
// the time according to the user's OS time settings and locale
alert((new Date('Jun 25 2010 13:30:00 GMT-0230'))); // Newfoundland time
alert((new Date('Jun 25 2010 13:00:00 GMT-0300'))); // Atlantic time
alert((new Date('Jun 25 2010 12:00:00 GMT-0400'))); // Eastern time
alert((new Date('Jun 25 2010 11:00:00 GMT-0500'))); // Central time
alert((new Date('Jun 25 2010 10:00:00 GMT-0600'))); // Mountain time
alert((new Date('Jun 25 2010 9:00:00 GMT-0700'))); // Pacific time
Отметки времени
// If you don't want to work with strings, use numbers instead.
// These return the JS timestamp for the same values above.
// The value is a *delta*, so it is unaffected by DST.
alert((new Date('Jun 25 2010 13:30:00 GMT-0230')).getTime()); // Newfoundland time
alert((new Date('Jun 25 2010 13:00:00 GMT-0300')).getTime()); // Atlantic time
alert((new Date('Jun 25 2010 12:00:00 GMT-0400')).getTime()); // Eastern time
alert((new Date('Jun 25 2010 11:00:00 GMT-0500')).getTime()); // Central time
alert((new Date('Jun 25 2010 10:00:00 GMT-0600')).getTime()); // Mountain time
alert((new Date('Jun 25 2010 9:00:00 GMT-0700')).getTime()); // Pacific time