Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Alien2001

Обновление часовых поясов

Recommended Posts

С 26 октября в России снова изменяется система исчисления времени и вводится новая шкала часовых зон (подробности - http://www.rg.ru/2014/07/25/vremiya-dok.html). Московское время с этого момента соответствует часовому поясу UTC+3, вместо UTC+4, действовавшего с 2011 года. Сезонный перевод часов осуществляться по-прежнему не будет. Соответственно меняются часовые зоны и других субъектов Федерации. То есть в ночь на 26 октября в большинстве регионов часы будут переведены на один час назад. Исключение составляют Удмуртия, Кемеровская, Самарская области, Камчатский край, Чукотский автономный округ, где часы не переводятся, а также Магаданская область и Забайкальский край, где часы переводятся на два часа назад.

 

Я подготовил для себя соответствующий патч и решил выложить на случай, если кому-то он пригодится. Он нужен обладателям версии 3.4 и тем обладателям более ранних версий, кто менял часовые зоны, исходя из системы 2011 года, а не просто "подкручивал" системное время, либо оставлял все как есть.

 

Для того, чтобы исправить часовые пояса, достаточно внести изменения в языковые файлы.

 

Для русского языка:

 

в наборах слов core/public_usercp и core/admin_global:

'time_2' =>        "(GMT + 2:00) Киев, Калининград, Хельсинки, Таллинн, Варшава, Иерусалим",
'time_3' =>        "(GMT + 3:00) Волгоград, Москва, Санкт-Петербург, Минск",
'time_4' =>        "(GMT + 4:00) Баку, Тбилиси, Ереван, Ижевск, Самара",
'time_5' =>        "(GMT + 5:00) Екатеринбург, Уфа, Тюмень, Исламабад, Карачи, Ташкент",
'time_6' =>        "(GMT + 6:00) Астана, Новосибирск, Омск, Барнаул, Дакка",
'time_7' =>        "(GMT + 7:00) Красноярск, Кемерово, Бангкок, Ханой, Джакарта",
'time_8' =>        "(GMT + 8:00) Пекин, Гонконг, Сингапур, Тайбей, Иркутск, Улан-Удэ, Чита",
'time_9' =>        "(GMT + 9:00) Осака, Саппоро, Сеул, Токио, Якутск ",
'time_10' =>   	"(GMT + 10:00) Мельбурн, Сидней, Владивосток, Хабаровск, Магадан, Южно-Сахалинск",
'time_11' =>   	"(GMT + 11:00) Новая Каледония, Соломоновы о-ва, Чокурдах",
'time_12' =>   	"(GMT + 12:00) Петропавловск-Камчатский, Анадырь, Окленд, Фиджи, Веллингтон",

 

 

Для английского языка:

 

в наборах слов core/public_usercp и core/admin_global:

 

'time_2' =>        "(GMT + 2:00 hours) Cairo, Helsinki, Tallinn, Warshaw, Kaliningrad",
'time_3' =>        "(GMT + 3:00 hours) Baghdad, Riyadh, Moscow, Nairobi",
'time_4' =>        "(GMT + 4:00 hours) Abu Dhabi, Baku, Muscat, Tbilisi",
'time_5' =>        "(GMT + 5:00 hours) Karachi, Tashkent, Ekaterinburg",
'time_6' =>        "(GMT + 6:00 hours) Astana, Novosibirsk, Bangladesh, Dhakra",
'time_7' =>        "(GMT + 7:00 hours) Bangkok, Hanoi, Jakarta, Krasnoyarsk",
'time_8' =>        "(GMT + 8:00 hours) Hong Kong, Perth, Singapore, Taipei, Irkutsk",
'time_9' =>        "(GMT + 9:00 hours) Osaka, Sapporo, Seoul, Tokyo, Yakutsk",
'time_10' =>   	"(GMT + 10:00 hours) Melbourne, Papua New Guinea, Sydney, Vladivostok",

 

Если вы не хотите утруждать своих посетителей ручным переводом часов и корректировкой профайла, вы можете сделать это за них, изменив в базе members

значение поля time_offset (для московской зоны - с 4 на 3). Для этого нужно выполнить следующие запросы:

 

UPDATE members SET time_offset=10 WHERE time_offset=12 AND members_auto_dst=0;
UPDATE members SET time_offset=10 WHERE time_offset=11 AND members_auto_dst=0;
UPDATE members SET time_offset=9  WHERE time_offset=10 AND members_auto_dst=0;
UPDATE members SET time_offset=8  WHERE time_offset=9  AND members_auto_dst=0;
UPDATE members SET time_offset=7  WHERE time_offset=8  AND members_auto_dst=0;
UPDATE members SET time_offset=6  WHERE time_offset=7  AND members_auto_dst=0;
UPDATE members SET time_offset=5  WHERE time_offset=6  AND members_auto_dst=0;
UPDATE members SET time_offset=3  WHERE time_offset=4  AND members_auto_dst=0;
UPDATE members SET time_offset=2  WHERE time_offset=3  AND members_auto_dst=0;

 

В данном примере таблица называется "members", возможно у вас установлены префиксы для таблиц и она называется ibf_members или как-то иначе. Проверьте и замените во всех запросах. Обратите внимание, массовое изменение часовых поясов через базу имеет один существенный минус: в результате таких действий пострадают пользователи из сопредельных стран, которые часовой пояс не меняют. Это Армения, Белоруссия, Узбекистан, Таджикистан, Туркменистан, Грузия, Казахстан, Киргизия, а также Китай, некоторые страны Ближнего Востока и ЮВА. Учитывайте, какая у вас структура посетителей. Кроме того, вы не сможете правильно перевести время для Чукотки, Самарской и Кемеровской областей, Камчатского и Забайкальского краев и Удмуртии.

 

И еще раз, обратите внимание: Россия не переходит на зимнее время! Россия меняет часовые пояса, то есть "сдвигается" по времени на запад относительно всех остальных стран.

 

Надеюсь, кому-то пригодится.

  • Upvote 4

Share this post


Link to post
Share on other sites

Для этого нужно выполнить следующие запросы:

Либо выполнить один

UPDATE members SET time_offset=time_offset-1 WHERE time_offset > 2 AND time_offset NOT IN(5) AND members_auto_dst=0

Share this post


Link to post
Share on other sites

Либо выполнить один

UPDATE members SET time_offset=time_offset-1 WHERE time_offset > 2 AND time_offset NOT IN(5) AND members_auto_dst=0

 

Лучше так не делать. Там есть всякие разные экзотические оффсеты типа GMT + 6:30. И их затрагивать незачем. Понятно, что на русскоязычном форуме вряд ли есть люди из Кабула, но из Бомбея в принципе могут быть. Мы же хотим сделать максимально чисто.

 

Кроме того, там еще одна загогулина имеется, которая из данной формулы выбивается:

UPDATE members SET time_offset=10 WHERE time_offset=12 AND members_auto_dst=0

Share this post


Link to post
Share on other sites

Мы же хотим сделать максимально чисто.

Ну ок. Исправим чтобы было все "чисто"

 

UPDATE members SET time_offset=IF(time_offset=12, time_offset-2, time_offset-1) WHERE time_offset BETWEEN 3 AND 12 AND time_offset NOT IN(5) AND members_auto_dst=0

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...