Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не правильное время на не правильном месте

976
02 февраля 2011 года
mikhalych
198 / / 04.01.2009
Здравствуйте. Хотел задать вам профессионалам довольно примитивный и наивный вопрос.

Сервер на котором мой сайт хостится находится в зоне GMT -5.
Локальное время где я живу GMT +5.

Мой скрипт парсить RSS ленту новостей (на PHP) и закидывает в базу (MySQL), скрипт работает и во время закидывания в базу почему то время изменяет (на -5 часов). Допустим в RSS ленте есть вот такой item

[HTML]
<item>
<title>Хосни Мубарак пообещал не участвовать в следующих выборах президента</title>
<link>http://some-site.com/news/khosni-mubarak-poobeshchal-ne-uchastvovat-v-sleduyushchikh-vyborakh-prezidenta</link>
<pubDate>Wed, 02 Feb 2011 05:05:47 +0000</pubDate>
<dc:creator>Zebra</dc:creator>
<guid isPermaLink="false">98840 at http://some-site.com</guid>
</item>

[/HTML]

Как видите время тут 05:05:47 но после того как мой срипт его заберет и засунет в базу

Код:
$p = new podcast(); //class podcast можете уидеть во вложениях
$p->cast('http://some-site.com/news/rss');
$newsLenta=$p->get_podcast_arrays();

foreach($newsLenta as $item)
  {
   $date=$item["pubdate"];

   $date=explode(" ",$date);
           $day=$date[1];
           $month=$date[2];
           $month=DigitalMonth($month); //Изменяем строковой месяц в цифровой например Jan-> 01, или Feb->02
           $year=$date[3];
           $time=$date[4];
$post_date=$year."-".$month."-".$day." ".$time;

$query="INSERT INTO newsTable (content,image_path,link,post_date,title) VALUES (";
           $query.="'".$content."','".$img."','".$item['link']."','".$post_date."','".$item['title']."')";

  }


Остальные поля вводятся нормально только проблема со временем.
Пробовал изменит часовой пояс
 
Код:
date_default_timezone_set('Asia/Yekaterinburg');


Не помогает
:D
8
02 февраля 2011 года
mfender
3.5K / / 15.06.2005
налицо проблема с египетской революцией и Мубареком. Это порча просто :D

ладно, серьёзней. А поле `post_date` какого типа? И СУБД какая?
976
02 февраля 2011 года
mikhalych
198 / / 04.01.2009
Цитата: mfender
А поле `post_date` какого типа?



Поле типа datetime ENGINE=InnoDB

Цитата: mfender
И СУБД какая?



Цитата: mikhalych
и закидывает в базу (MySQL),
:D




:confused:

8
02 февраля 2011 года
mfender
3.5K / / 15.06.2005
пардон, не дочитал про MySQL.

поле datetime. тогда вот это
Цитата:
[COLOR=#000000][COLOR=#0000BB]$post_date[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]$year[/COLOR][COLOR=#007700].[/COLOR][COLOR=#DD0000]"-"[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$month[/COLOR][COLOR=#007700].[/COLOR][COLOR=#DD0000]"-"[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$day[/COLOR][COLOR=#007700].[/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$time[/COLOR][COLOR=#007700];[/COLOR][/COLOR]


мне совсем не понятно. хотя, хрен знает, вроде всё по правилам.

а хостёр что говорит по поводу своего времени? у вас разница 10 часов, если я правильно понял. сдвиг записи получается на 5 часов. а почему? потому что в pubDate написано арабскими цифрами: +0000.

976
02 февраля 2011 года
mikhalych
198 / / 04.01.2009
Цитата: mfender

мне совсем не понятно. хотя, хрен знает, вроде всё по правилам.



Цитата: mykhalych

$date=$item["pubdate"];

$date=explode(" ",$date);
$day=$date[1];
$month=$date[2];
$month=DigitalMonth($month); //Изменяем строковой месяц в цифровой например Jan-> 01, или Feb->02
$year=$date[3];
$time=$date[4];
$post_date=$year."-".$month."-".$day." ".$time;



Цитата: mfender

сдвиг записи получается на 5 часов. а почему? потому что в pubDate написано арабскими цифрами: +0000.



Хотя я на эти +0000 даже не смотрю обрати внимания на мой скрипт сверху. Я просто тупо explode'ом беру дату как текст.

8
02 февраля 2011 года
mfender
3.5K / / 15.06.2005
вот потому я и спросил, что думает хостёр о своём времени на сервере.
дело в том, что у нормальных людей системное время всегда GMT, без поправок на часовой пояс.
277
02 февраля 2011 года
arrjj
1.7K / / 26.01.2011
А что говорит MySQL на SHOW VARIABLES LIKE '%time_zone%'?
Попробуй после коннекта к бд выполнить запрос SET time_zone = '+00:00'

//Ну и в пхп есть date_default_timezone_set('Europe/Moscow');
244
02 февраля 2011 года
UAS
2.0K / / 19.07.2006
Да, arrjj раньше высказался. Тут проблема вся в мускуле, сам когда-то с подобным столкнулся. Надо в БД юзать только GMT-время (ибо точка отсчета), а уже в скриптах корректировать. Так что пишите хостеру или исопльзуйте SQL-запросы для натсройки параметров тайм-зоны.
976
02 февраля 2011 года
mikhalych
198 / / 04.01.2009
Цитата: arrjj
А что говорит MySQL на SHOW VARIABLES LIKE '%time_zone%'?


Variable_name Value
system_time_zone EST
time_zone SYSTEM

Цитата: arrjj

Попробуй после коннекта к бд выполнить запрос SET time_zone = '+00:00'


Не помогло

Цитата: arrjj

//Ну и в пхп есть date_default_timezone_set('Europe/Moscow');



Цитата: mykhalych

Пробовал изменит часовой пояс
 
Код:
date_default_timezone_set('Asia/Yekaterinburg');

4
02 февраля 2011 года
mike
3.7K / / 01.10.2002
Настройки PHP проверял? Он теперь шибко умный.

[phpdoc]date_default_timezone_set[/phpdoc]
277
02 февраля 2011 года
arrjj
1.7K / / 26.01.2011
Вобщем mysql тут не при чем, т.к. что ты указываеш вручную
Цитата:

$post_date=$year."-".$month."-".$day." ".$time;


То в ней и хранится.
И пхп-шные настройки тоже никак не влияют на записанные/считанные время и дату. Можете просто проверить : в пхп выполнить последовательно mysql запросы: insert into newsTable (post_date) values ('2011-01-01 01:01:01') и select'ом её извлечь.
Ну а по времени правильно: rss по +00:00 выписываются а вы смотрите по +05:00 вот и разница -05 часов.

4
02 февраля 2011 года
mike
3.7K / / 01.10.2002
Цитата: mikhalych
Здравствуйте. Хотел задать вам профессионалам довольно примитивный и наивный вопрос.

Не помогает
:D


Еще одно, в PHP есть волшебная функция: [phpdoc]strtotime[/phpdoc]

 
Код:
$p = new podcast(); //class podcast можете уидеть во вложениях
$p->cast('http://some-site.com/news/rss');
$newsLenta=$p->get_podcast_arrays();

foreach($newsLenta as $item)
  {
   $query="INSERT INTO newsTable (content,image_path,link,post_date,title) VALUES (";
   $query.="'".$content."','".$img."','".$item['link']."','".date("Y-m-d H:i:s",strtotime($item["pubdate"]))."','".$item['title']."')";
  }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог