Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2009, 18:44
nws nws вне форума
Новичок на форуме
Отправить личное сообщение для nws Посмотреть профиль Найти все сообщения от nws
 
Регистрация: 24.08.2009
Сообщений: 5

Разница времени, в зависимости от часового пояса
Всем привет.

Задача:

В БД есть 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() ?

Последний раз редактировалось nws, 24.08.2009 в 18:51.
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2009, 20:11
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

А не легче перестать паритса и сделать всё это на php
время не конёк JS
__________________
Лови позитив
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2009, 21:44
nws nws вне форума
Новичок на форуме
Отправить личное сообщение для nws Посмотреть профиль Найти все сообщения от nws
 
Регистрация: 24.08.2009
Сообщений: 5

как я узнаю время юзера с помощью php ?
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2009, 08:20
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

нда...
чувствую с php вы не знакомы
__________________
Лови позитив
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2009, 10:41
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Для этого юзер сам должен указывать, в каком поясе ему отображать время, а если такое не возможно - тогда да... JS...

Написать не могу, т.к. это сплошная математика, а я с ней не больно дружу
Ответить с цитированием
  #6 (permalink)  
Старый 26.08.2009, 13:02
nws nws вне форума
Новичок на форуме
Отправить личное сообщение для nws Посмотреть профиль Найти все сообщения от nws
 
Регистрация: 24.08.2009
Сообщений: 5

Сообщение от JSprog Посмотреть сообщение
нда...
чувствую с php вы не знакомы
Оказалось что это не так...

Теперь по теме:
После дня тра..ния мозга получилось вот что:

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;																		
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск