Разница времени, в зависимости от часового пояса
Всем привет.
Задача: В БД есть 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:42. |