Конвертация даты в PHP

Тема в разделе "PHP", создана пользователем krobol, 31 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. krobol

    krobol

    Регистр.:
    6 июн 2008
    Сообщения:
    455
    Симпатии:
    126
    Никак не получается конвертировать дату, полученную от пользователя во внутренний формат timestamp.

    PHP:
    $t time();
    $t1 strtotimedate"d-m-Y"$t ) );
    $t1 почему-то далеко не равно $t (разница намного более суток)

    как перевести дату, полученную из веб-формы в формате d-m-Y (31.05.2009) во внутренний формат timestamp ?
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    1. На какой оси делаешь?
    2. Только что проверил, код работает верно - разница немногим более 20 часов.
    3. d-m-Y - это 31-05-2009, а не 31.05.2009
     
  3. krobol

    krobol

    Регистр.:
    6 июн 2008
    Сообщения:
    455
    Симпатии:
    126
    1. ось FreeBSD
    3. да, d-m-Y - это 31-05-2009 ошибся немного

    2.
    в переменной $_POST["db"] передаётся дата, введённая пользователем в формате d-m-Y
    PHP:
    print "~".$_POST["db"]."~";
    $l_db strtotime($_POST["de"]);
    print 
    strtotime($_POST["de"])."~";
    результат: ~31-05-2009~2108840400~

    затем, выводим на экран $l_db
    PHP:
    print "~".$l_db."~";print date("d-m-Y",$l_db)."~";
    результат: ~2108840400~29-10-2036~


    Помогите, пожалуйста, разобраться!
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Тебе не кажется, что $_POST["db"] и $_POST["de"] - это не одно и тоже?
     
  5. krobol

    krobol

    Регистр.:
    6 июн 2008
    Сообщения:
    455
    Симпатии:
    126
    у меня просто дата начала и дата конца ($db и $de)

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


    Для чистоты эксперимента создал файл 1.php:

    PHP:
    <?php

    print "~"."31-05-2009"."~"
    print 
    strtotime("31-05-2009")."~"."<br />"
    $l_db strtotime("31-05-2009"); 

    print 
    "~".$l_db."~";print date("d-m-Y",$l_db)."~"


    ?>
    результат, выводимый браузером:
    ~31-05-2009~2108840400~
    ~2108840400~29-10-2036~


    запускается на сервере FreeBSD на хостинге
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    ХЗ тогда.

    У себя получаю
    ~31-05-2009~1243713600~
    ~1243713600~31-05-2009~

    Может дело с настройками локали и/или дат.
    Попробуй что выведет
    PHP:
    print "~"."31-05-2009"."~"
    print 
    strtotime("31-05-2009")."~"."<br />"
    $l_db strtotime("31-05-2009"); 

    print 
    "~".$l_db."~";print date("d-m-Y",$l_db)."~"."<br />";
    echo 
    mktime(0,0,0,5,31,2009);
     
  7. krobol

    krobol

    Регистр.:
    6 июн 2008
    Сообщения:
    455
    Симпатии:
    126
    Описание

    int strtotime (string time [, int now])

    Функция ожидает строку, содержащую английский формат даты, и пытается разобрать этот формат в UNIX timestamp относительно timestamp, заданного в параметре now, или относительно текущего времени, если ничего не задано.


    Что за текущее время. Как мне быть? И почему у тебя всё нормально, а у меня что-то не то?



    ось: FreeBSD 6.2-RELEASE-p3



    запускаю у себя на компе (WinXP), результат как у тебя
    ~31-05-2009~1243713600~<br />~1243713600~31-05-2009~
     
  8. lesorub

    lesorub Жаббервог

    Регистр.:
    22 дек 2008
    Сообщения:
    325
    Симпатии:
    280
    У тебя не правильно отрабатывает строчка
    попробуй через mktime
     
    krobol нравится это.
  9. krobol

    krobol

    Регистр.:
    6 июн 2008
    Сообщения:
    455
    Симпатии:
    126
    кстати, такой код

    PHP:
    <?php

    print "~"."05/31/2009"."~"
    $l_db strtotime("05/31/2009"); 
    print 
    strtotime("05/31/2009")."~"."<br />"


    print 
    "~".$l_db."~";print date("d-m-Y",$l_db)."~"

    ?>
    на сервере выдаёт правильный ответ:
    ~05/31/2009~1243713600~
    ~1243713600~31-05-2009~




    покажите, как strtotime заменить на mktime в моём случае: d-m-Y ?
    наиболее простым кодом
     
  10. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    krobol, что показывает код из поста #6?
     
Статус темы:
Закрыта.