Как определить - летнее сейчас время или зимнее.

Статус
В этой теме нельзя размещать новые ответы.

Активист

Активист
Команда форума
Задача - у нас есть UTC, ни каких функций PHP, мы не можем стандартными функциями определить день недели и т.п., есть ТОЛЬКО время и дата в формате зоне UTC, как определить - зимнее сейчас время или нет.

Обратите внимание - тема в оффтопике, к PHP не имеет отношения.
 

AmdY

Пью пиво
Команда форума
задача собственно сводится к ифам и определению поледнего воскресенья марта и последнего воскресенье октября. определение дня недели можно найти в гугле для любого языка
http://www.google.ru/search?hl=ru&newwindow=1&client=opera&hs=psk&rls=ru&&sa=X&ei=TwcSTbP4OYKh8QOmnNWGBw&ved=0CCQQBSgA&q=определение+дня+недели+алгоритм&spell=1
 

itprog

Cruftsman
в UTC нет зимнего или летнего время. Без знания локальной зоны это сделать невозможно
поледнего воскресенья марта и последнего воскресенье октября.
в сша и канаде это второе воскресенье в марте и первое в ноябре )
 

AmdY

Пью пиво
Команда форума
itprog
в сша и канаде UTC зависит от часового пояса? думаю, воскресенье тоже рассчитывать нужно для нулевого меридиана
 

untied

Сдвинутый новичок
itprog
в сша и канаде UTC зависит от часового пояса? думаю, воскресенье тоже рассчитывать нужно для нулевого меридиана
UTC не зависит от часового пояса не только в сша и канаде, но и вообще везде. На то оно и UTC. ; )
 

Активист

Активист
Команда форума
Задача - ДАНО ВРЕМЯ В UTC, таймзон НЕТ, вытащить текущее время, например, в Лондоне, Москве, Зимбабве, Токио и т.п.

AmdY
Про вычисление дней недели, сразу вспомнил, начал реализовывать, делал еще в 95 наверное на спектруму, правда долго ковырялся в голове (сейчас же на все есть функции), далее - запарился придумывать выражения в IF, вот мое решение, кому может понадобиться.

PHP:
<?php
header("Content-type: text/html; charset=windows-1251");
function dayOfWeek($d, $m, $y) {
	$a = (int)((14 - $m) / 12);
	$b = $y - $a;
	$c = $m + 12 * $a - 2;
	return (7000 + (int)($d + $b + (int)($b / 4) - (int)($b / 100) + (int)($b / 400) + (31 * $c) / 12)) % 7;
}

function isDst($d, $m, $y) {
	if (
			($m <= 2)
			|| ($m - 10 > 0)
			|| ($m == 3 && ((int)($d / 25) == 0 || ((int)($d / 25) == 1 && dayOfWeek($d, $m, $y ) > dayOfWeek(24, $m, $y))))
			|| ($m == 10 && ((int)($d / 25) == 1 && dayOfWeek($d, $m, $y ) <= dayOfWeek(24, $m, $y)))
			) return 0;   
	return 1;
}

/*
 * For test;
 */ 
$array = array("ВС", "ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ");
for ($i = 20; $i <= 31; $i++) {
	echo $i." | ".((int)($i/25))." | ".$array[dayOfWeek($i, 10, 2012)]." | DST=".isDst($i, 10, 2012)."<br>";
}
 
?>
 
  • Like
Реакции: AmdY

Sulik

Новичок
А разве не отменили переход с летнего на зимнее время и обратно. я слышал что этой осенью мир последний раз переходил
 

Активист

Активист
Команда форума
itprog
Что ты тупишь? Есть текущее время в UТС, невозможно получить информацию о временных зонах, известно лишь то, что например в МСК зимой +3 UTC, летом +4 UTC, скажите точное время сейчас в Москве, зная, что сейчас 15:28 UTC

...
Переход на летнее/зимнее время не отменили.
 

Crys

Двинутый новичок
itprog
Что ты тупишь? Есть текущее время в UТС, невозможно получить информацию о временных зонах, известно лишь то, что например в МСК зимой +3 UTC, летом +4 UTC, скажите точное время сейчас в Москве, зная, что сейчас 15:28 UTC

...
Переход на летнее/зимнее время не отменили.

PHP:
date_default_timezone_set('Europe/Moscow'); 
print date('Y-m-d H:i:s',strtotime('2010-12-22 15:28:00 UTC'));

не катит?
 

Crys

Двинутый новичок
А.. стоп... Если известно тока то, что зимой где-то в абстрактном месте +3 UTC, летом +4 - то кто запрещает выбрать период зимы и добавлять к UTC +3, а летом +4?
 

itprog

Cruftsman
Crys
и как тогда определять когда зимнее, а когда летнее время и есть ли там переход вообще в этом абстрактном месте?
 

Активист

Активист
Команда форума
itprog
Это не тайм зона, это константа (которую я посмотрел в википедии в разделе нужного мне населенного пункта), которую я могу использовать в функциях вычисления текущего времени для них (пунктов) и их агломераций, так например, на одной меридиане "тайм-зоны" могут отличаться (простой пример Россия - вообще все сдвинуто на +1), но и где-то не учитываться летнее смешение времени (например в Токио), о чем я тоже поискал в интернете, зная UTC и все - нужно получить данные, грубо говоря, ввести "Тайм зоны".
 

Crys

Двинутый новичок
ну типа зима - с первого октября по первое
Crys
и как тогда определять когда зимнее, а когда летнее время и есть ли там переход вообще в этом абстрактном месте?
Ну если известно, что летом +4, зимой +3 где-то там, то должно быть известно, когда происходят переходы где-то там. А иначе задача выглядит как "хочу того, не знаю чего"
 

Активист

Активист
Команда форума
Написано ж, к PHP не имеет отношения, это будет впиливаться вообще в другой, не связанный с PHP код.
Кстати, удобно использовать в JS, Flash :)

Crys
Соединяется клиент, он говорит дату и время в UTC, не известно, с какого города, страны, мередиана, переходит ли он на летнее/зимнее время, но мне нужно знать точно, сколько было на тот момент в Токио, например, для вычислений. На "борту" нет ни одной подходящей функции.

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

России и Европе (до 2002 года) переход на летнее время осуществляется в последнее воскресенье марта в 2:00 переводом часовых стрелок на 1 час вперёд, а обратный переход осуществляется в последнее воскресенье октября в 3:00 переводом стрелок на 1 час назад.

Начиная с 2002 года, согласно директиве ЕС(2000/84/EC)[22] в Европе переход на летнее время осуществляется в 01:00 по Гринвичу.

В США и Канаде с 2007 года переход на летнее время осуществляется во второе воскресенье марта в 2:00 и возвращается обратно в первое воскресенье ноября, также в 2:00[23]. Следует заметить, что не по всей территории Соединённых Штатов и Канады летнее время используется одинаково. К примеру, на северо-западе канадской провинции Онтарио жители отказываются переводить стрелки летом[24].
 

Sulik

Новичок
Наверное придеться описать базу зон для конкретно того чего хочешь примерно как в timesone.db
а если в JS или flash это будет то тогда то почему не засунуть ajax и подключить к пхп.
Можно попробовать брать время браузера но часы компа тоже могут врать.
ты хоть ИП его знать будешь?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху