За последние 24 часа нас посетили 50604 программиста и 1690 роботов. Сейчас ищут 985 программистов ...

mktime() генерирует не ту timestamp

Тема в разделе "PHP для новичков", создана пользователем wir_wolf, 28 ноя 2012.

  1. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Доброго времени суток. Столкнулся с очень интересной проблемой. Я пришу админку для проекта, там нужно указывать дату, это я делаю через jQuery Ui.datetimepicker. В результате, я получаю в поле "28.11.2012 20:52 ".
    потом мне это все нужно записать в базу, что я делаю
    Код (Text):
    1.         //Не указали дату. Сами выноваты
    2.         if($_POST['date'] == ''){
    3.             $time_create = time();
    4.         }
    5.         else
    6.         {
    7.             $datatime = explode(" ", $_POST['date']);
    8.             $date = explode(".", $datatime[0]);
    9.             $time = explode(":", $datatime[1]);
    10.  
    11.             $time_create = mktime($time[0], $time[1], '00', $date[0], $date[1], $date[2]);
    12.         }
    и данный скрипт мне постоянно генерит дату 11-04-2014 20:52:00 в не зависимости от того что прийдет на вход.
    Создал отдельный файл без инклюдов и т. д. Там работает нормально. В чем может быть утка?
     
  2. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    if($_POST['date'] == ''){

    1. откуда такая уверенность в том, что вообще будет существовать $_POST['date']?
    2. $date[0], $date[1], $date[2]); Откуда такая уверенность в том, что строка даты тебе будет передана именно в этом формате? В строке может не быть точки, а ты уже используешь элемент массива, которого может не быть $date[2].
    3. В студию то, что находится в $_POST['date'] на момент вызова
     
  3. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Код (Text):
    1.         if($_POST['date'] == '')
    2.         {
    3.             $time_create = time();
    4.         }
    5.         else
    6.         {
    7.             logger::info($_POST['date']);
    8.             $datatime = explode(" ", $_POST['date']);
    9.             $date = explode(".", $datatime[0]);
    10.             $time = explode(":", $datatime[1]);
    11.             logger::dump($date,'pars date');
    12.             logger::dump($time,'pars time');
    13.             $time_create = mktime($time[0], $time[1], 00, $date[0], $date[1], $date[2]);
    14.             logger::dump(date('d-m-Y G:i:s',$time_create));
    15.         }
    Выводит
    Info:28.11.2012 21:33
    Dump: array('pars date'=>array('0'=>'28', '1'=>'11', '2'=>'2012' ))
    Dump: array('pars time'=>array('0'=>'21', '1'=>'33'))
    Dump: array('undefined'=>'11-04-2014 21:33:00')
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    var_dump и все встанет на свои места, а не logger::dump(date('d-m-Y G:i:s',$time_create));
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    обрати внимание что в дате сначала идет месяц, потом день, потом год
     
  6. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Вот черт. Не навижу эту систему, когда сначала месяц потом день. Спасибо!
    var_dump() конечно супер но я пользуюсь
    FirePHP :: Дополнения Firefox
     
  7. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград

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