Всем привет.
Задача:
В БД есть 2 поля time, gmt.
Необходимо вывести время, в зависимость от часового пояса юзера.
Пример:
time 10:00
gmt: +3
У меня gmt +2, т.е. вывод должен быть 11:00
<script type="text/javascript">
function getTimeZoneOffset()
{
var rightNow = new Date();
var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
var temp = date1.toGMTString();
var date3 = new Date(temp.substring(0, temp.lastIndexOf(' ')-1));
var temp = date2.toGMTString();
var date4 = new Date(temp.substring(0, temp.lastIndexOf(' ')-1));
var hoursDiffStdTime = (date1 - date3) / (1000 * 60 * 60);
var hoursDiffDaylightTime = (date2 - date4) / (1000 * 60 * 60);
if (hoursDiffDaylightTime == hoursDiffStdTime)
{
timeZoneOffset = hoursDiffStdTime * (-60);
} else {
timeZoneOffset = hoursDiffDaylightTime * (-60);
}
return timeZoneOffset;
}
function getTimeInsteadOfTimezone(hh_from, mm_from, offset, clocktype, showDayOfWeek)
{
var result = '';
var prefix = 'AM';
var weekdays = new Array('Sun', 'Mon', 'Tue', 'Wen', 'Thu', 'Fri', 'Sat');
var ms = new Date();
var newMS = new Date(ms.getFullYear(), ms.getMonth(), '8', hh_from, mm_from, '0', '0');
console.log('newMS = '+newMS);
Diff = newMS.getTimezoneOffset() - offset;
newMS.setTime(Number(ms) + (Diff * 60000));
var hh = newMS.getHours();
console.log('hh = ' + hh);
if(clocktype == 12)
{
if(hh > 11) { prefix = 'PM'; }
if(hh > 12) { hh -= 12; }
}
result = hh + ':';
if(ms.getMinutes() < 10) { result += '0'; }
result += ms.getMinutes();
if(clocktype == 12) { result += ' ' + prefix; }
if(showDayOfWeek) {result += ', ' + weekdays[ms.getDay()];}
return result;
}
//Вызов:
var offset = getTimeZoneOffset();
var tmp = getTimeInsteadOfTimezone(10, 0, offset, 24, false); //10 - часы, 0 - минуты, offset - результат new Date().getTimezoneOffset()
console.log(tmp)
</script>
Проблема в том, что newMS в функции getTimeInsteadOfTimezone возврашает время в моём часовом поясе.
Sat Aug 08 2009 09:00:00 GMT+0300 (EET) (+3 летнее время)
Можно задать строку Sat Aug 08 2009 09:00:00 GMT+0500 (EET), как-то ее отпарсить, чтобы примерить метод setTime() ?