Вопрос № 49134: Здравствуйте.
У меня две проблемки, которые нужно решить с помощь javascript
1)Мне необходимо определить дату, причем "распихать" в отдельные переменные год, месяц, число.
2)Необходимо определить время в Санкт-Петербурге, невзир...
Вопрос № 49.134
Здравствуйте.
У меня две проблемки, которые нужно решить с помощь javascript
1)Мне необходимо определить дату, причем "распихать" в отдельные переменные год, месяц, число.
2)Необходимо определить время в Санкт-Петербурге, невзирая на то, на каком сервере лежит сайт и откуда на него зашли.
Буду очень признателен за подробный ответ, т.к. мои знания по javascript хотя и не нулевые, но весьма близкие к ним
Отвечает: wils0n
Здравствуйте, Кузьма Дмитрий Валерьевич!
1) Это просто. стоит только посмотреть описание класса Date.
2) Здесь позаковыристей будет. Дело в том, что javascript не поддерживает летнее время. То есть если брать за "эталон" времени - время нулевого мердиана, то реальное ленинградское время должно отличаться от него на три часа. С приходом летнего времени стрелки сдвигаются и там, и там, и разница остаётся три часа. Вот только javascript стрелки не переводит. И у него время отличается на четыре часа. Чтоб обойти эту проблему мы высчитываем, евляется ли текущее время летним. И если да, то прибавляем ещё
один час.
Вот код:
<html>
<head>
lang="javascript">
function ShowDate()
{
var today = new Date(); // взять текущее время
year = today.getUTCFullYear(); // вытащить из него год. Важно использовать getFullYear(), a не getYear(). Попробуйте и почувствуйте разность
month = today.getUTCMonth(); // вытащить месяц
day = today.getUTCDate(); // число
alert("today is "+day+"."+month+"."+year); // показать всё это
}
function IsSummerTime(date) // функция определяет, является ли время date летним
{
var march = new Date( Date.UTC( date.getUTCFullYear(),2,31 ) );
// начало летнего времени
var begin_st = new Date( Date.UTC( date.getUTCFullYear(),2,31-march.getUTCDay() ) );
var oct = new Date(Date.UTC(date.getUTCFullYear(),9,31));
// конец летнего времени
var end_st = new Date(Date.UTC(date.getUTCFullYear(),9,31-oct.getUTCDay()));
// если date лежит между, то время летнее
if ((date >= begin_st) && (date < end_st)) return 1;
else return 0;
}
function ShowSPBTime()
{
var locale = new Date();
hour = locale.getUTCHours(); // взять время 0-го часового пояса (зимнее)
hour = hour + 3 + IsSummerTime(locale); // прибавить три часа и получить время в Питере. Здесь прибавляется значение функции IsSummerTime. Если время летнее, то прибавится один час
hour = hour % 24; // на случай, если перебрались в след. сутки
m = locale.getMinutes();
s = locale.getSeconds();
alert("Ленинградское время: "+hour+":"+m+":"+s);
}
</script>
</head>
<body onload="ShowDate() || ShowSPBTime();"> <!--// вызываем при загрузке страницы-->
</body>
</html>
--------- Life is like a box with chocolate. You never know what you're gonna get. (c) Forrest Gump's mom
Ответ отправил: wils0n (статус: 5-ый класс)
Ответ отправлен: 16.07.2006, 01:24 Оценка за ответ: 5