За последние 24 часа нас посетили 30496 программистов и 1792 робота. Сейчас ищут 1126 программистов ...

Баг strtotime?

Тема в разделе "Прочее", создана пользователем Elkaz, 14 янв 2010.

  1. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    PHP:
    1.  
    2. <?php
    3. $time = '2009.02.13';
    4. echo strftime ('%d.%m.%Y', strtotime ($time)); // ожидаю 02.13.2009, получаю 01.01.1970
    5. $time = '1997.02.13';
    6. echo strftime ('%d.%m.%Y', strtotime ($time)); // ожидаю 02.13.1997, получаю 14.01.1997
    7.  
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    правильно оно выдает. у меня сегодня ДР.
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    пы.сы а локаль какая стоит? а то в разных локалях порядок dmy и mdy разные
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    440Hz
    ru_RU.UTF8
    С днём рожденья :)
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    У меня задача дату yyyy.mm.dd привести к dd.mm.yyyy
     
  6. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
  7. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    ну а если у тебя фиксированный yyyy|mm|dd то explode в руки и вперед :)
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    antonn
    С этим понятно. Интересует почему первую дату он приводит к false, а со второй всё-таки что-то делает.
     
  9. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    antonn
    Это извращение :) Ищу велик попроще
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Буквально только что решал задачу перевода "M j Y h:i:s:uA" в "d.m.Y H:i:s".
    Думал использовать: date_create_from_format и date_format, но date_create_from_format только для PHP 5 >= 5.3.0.
    В итоге решаю методами js.
     
  11. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Elkaz
    да куда уж проще-то? :))
     
  12. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    antonn
    Ладно, покрасивее :)
     
  13. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    даамс. интересно оно работает
    PHP:
    1. <?php
    2. $time = '1997.23.59'; // 14.01.1997
    3. $time = '1997.23.60'; // 01.01.1970
    4. $time = '1997.24.00'; // 15.01.1997
    5. $time = '1997.24.59'; // 15.01.1997
    6. echo strftime ('%d.%m.%Y', strtotime ($time));
    считает вторую цифру — часами?
     
  14. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    а что должно было получиться? :))
     
  15. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Блин, ну и развели вы тут.

    440Hz правильно в какой-то теме сегодня писал - "главное кода наваять побольше, а разбираться потом будем"
    жесть.
     
  16. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Simpliest
    Т.е
    strtotime ('1997.02.13') = int
    strtotime ('2009.02.13') = false
    Это нормально?
     
  17. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    а в языке со строгой типизацией ты бы получил исключение и послан далеко :)
     
  18. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Да.

    '.' пришел из Германии и не считается разделителем даты в US English (если я правильно помню, то там только "/", т.е. даже "-" не считается )

    Приводить рекомендую к такому виду
    http://www.cl.cam.ac.uk/~mgk25/iso-time.html
    YYYY-MM-DD как наиболее стабильный и удобный для работы (например, для сортировки)

    P.S. Если есть желание можешь углубиться в
    http://en.wikipedia.org/wiki/Calendar_date
    и
    http://en.wikipedia.org/wiki/ISO_8601
     
  19. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Simpliest
    Я сам дату в БД храню в виде timestamp - мне так с ней проще работать. Но дело не в этом.
    Либо ты меня не понимаешь, либо я тебя не понимаю. Посмотри код ниже:

    PHP:
    1.  
    2. <?php
    3. setlocale (LC_ALL, 'ru_RU.UTF8');
    4. $time = '2009.02.13';
    5. var_dump (strtotime ($time));
    6. $time = '1997.02.13';
    7. var_dump (strtotime ($time));
    8.  
    Результат:
    bool(false)
    int(853197180)

    Почему разный результат? По идее ведь оба должны быть false. Про форматы и всё остальное я понял.

    antonn
    Думаю это не так уж и плохо :)
     
  20. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Идею спроси у авторов функции.

    Она пытается распарсить текст, то, что ей удается - он выдает. Если ничего не получилось она дает false.
     
  21. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    флоппик, я в курсе. Сам в свое время подолбился с этой функцией.
    Но смысла в "достать хоть что-то" вижу мало - оно потом неприменимое для автоматического использования получается.