Разница времени, в зависимости от часового пояса
Всем привет.
Задача: В БД есть 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() ? |
А не легче перестать паритса и сделать всё это на php
время не конёк JS |
как я узнаю время юзера с помощью php ?
|
нда...
чувствую с php вы не знакомы |
Для этого юзер сам должен указывать, в каком поясе ему отображать время, а если такое не возможно - тогда да... JS...
Написать не могу, т.к. это сплошная математика, а я с ней не больно дружу:) |
Цитата:
Теперь по теме: После дня тра..ния мозга получилось вот что: function isDaylightTime() { 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) { return false; } else { //is present summer time return true; } } function getTimeInsteadOfTimezone(intHH, intMM, intGMT) { var result = ''; if(isDaylightTime()) { intGMT += 1; } var strHH = intHH; var strMM = intMM; if (intHH < 10) { strHH = '0' + intHH; } if (intMM < 10) { strMM = '0' + intMM; } var objCurrentDate = new Date(); var arWeekDays = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); var arMonth = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); var strDayOfWeek = arWeekDays[objCurrentDate.getDay()]; var strMonth = arMonth[objCurrentDate.getMonth()]; var intDay = objCurrentDate.getDate(); var intYear = objCurrentDate.getFullYear(); var strSeconds = '00' var strGMT = intGMT; if (intGMT >= 0) { strGMT = '+' + intGMT; } var objExpectedDate = strDayOfWeek + ' ' + strMonth + ' ' + intDay + ' ' + intYear + ' ' + strHH + ':' + strMM + ':' + strSeconds + ' GMT' + strGMT; var intExpectedDate = Date.parse(objExpectedDate); var intExpectedHH = new Date(intExpectedDate).getHours(); var intExpectedMM = new Date(intExpectedDate).getMinutes(); var strExpectedHH = intExpectedHH; var strExpectedMM = intExpectedMM; if (intExpectedHH < 10) { strExpectedHH = '0' + intExpectedHH; } if (strExpectedMM < 10) { strExpectedMM = '0' + intExpectedMM; } result = strExpectedHH + ':' + strExpectedMM; return result; } |
Часовой пояс GMT +3, время: 17:38. |