Strtotime php не работает

date — почему strtotime не работает при переполнении стека

Я пытаюсь сравнить между двумя датами, но, к сожалению, это не работает, преобразовав это в формат UNIX с strtotime , Я пытаюсь сравнить дата на другую дату.

Однако этот формат работает:

Но много раз это терпит неудачу. Я видел много примеров в Интернете, но я не могу придумать ничего хорошего!

Решение

От руководство (обратите особое внимание на часть, которую я положил в смелый):

«Даты в форматах m / d / y или dmy устраняются, если посмотреть на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что используется американский m / d / y; тогда как если разделитель тире (-) или точка (.), тогда предполагается европейский формат dmy. Однако, если год указан в двузначном формате, а разделителем является тире (-, строка даты анализируется как y-m-d.«

Итак, вот что вы делаете, с датами, которые PHP интерпретирует ваши строки, как в комментариях:

Надеюсь, это прояснит проблему, с которой вы столкнулись.

Как сказано в руководстве, используйте DateTime::createFromFormat / date_create_from_format если вы хотите избежать двусмысленности:

Другие решения

Ваш год формат 17 вызывая проблему в strtotime функция

ваше сравнение не работает, потому что strtotime(«22-04-17») фактически приводит к метке времени на эту дату: 17th April 2022 ;

Сделайте следующее, и вы поймете, что я имею в виду. следующий код выведет ‘2022-May-17`

Я знаю, что это не то, что вы ищете, но вы пытались сделать это, чтобы показать, если дата больше / меньше?

Тогда другой путь похож на этот ответ: ССЫЛКА НА САЙТ

Я написал функцию, которая принимает вашу строку даты и правильно возвращает timestmp. Обратите внимание, что я следовал соглашению PHP о двухзначных годах, i.e. 00-69 are mapped to 2000-2069 and 70-99 to 1970-1999

Теперь вы можете использовать эту функцию вместо strtotime для сравнения.

Наконец-то я получил решение. strtotime() не очень хорошо справляться с этим делом. Вы должны пойти на dateTime объект вместо

Читайте также:  Не работает веб банкинг ощад 24 7

Я просто проверил время с этой вещью, это было очень плохо

Источник

PHP strtotime () ничего не выводит

Вот что я получаю:

Почему strtotime () ничего не выводит сам по себе? Что-то не так с настройками сервера? Сервер: Apache / 2.2.11 (Win32), PHP 5.2.10, версия клиента MySQL: 5.0.51a.

strtotime ничего не выводит, btw: он возвращает false в случае ошибки; см. руководство :

Возвращаемые значения

Возвращает временную метку успеха, в противном случае FALSE. До PHP 5.1.0 эта функция вернет -1 при сбое.

Что не выводит ничего, это echo : false считается пустой строкой, и ничего не выводится.

Документация strtotime также дает допустимый диапазон для дат:

Примечание: действительный диапазон временной метки, как правило, от Fri, 13 Dec 1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (Это даты, которые соответствуют минимальным и максимальным значениям для 32-разрядного целого числа со знаком.) Кроме того, не все платформы поддерживают отрицательные метки времени, поэтому ваш диапазон дат может быть ограничен не раньше, чем эпоха Unix. Это означает, что, например, даты до 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах. Однако PHP 5.1.0 и более новые версии преодолевают это ограничение.

‘0000-00-00’ находится за пределами этого диапазона, поэтому он не считается действительной датой; следовательно, значение false возврата.

В качестве побочного элемента, чтобы действительно знать, что внутри переменной, вы можете использовать var_dump .
В качестве bnus, используемого с Xdebug , он даст вам неплохую продукцию 😉

0000-00-00 не является действительной датой.

date () дает результат, потому что он интерпретирует время ввода как 0 и компенсирует часовой пояс вашего сервера, я бы предположил. Готов поспорить, что date(‘Ymd H:i’, strtotime(. )) дала бы 1970-01-01 2:00

Вы принимаете strtotime() за time() .

strtotime буквально соответствует времени, ему нужна строка для преобразования ….. ко времени.

Возвращает временную метку успеха, в противном случае FALSE . До PHP 5.1.0 эта функция вернет -1 при сбое.

Поэтому он не проверяет эту временную строку.

Источник

strtotime не работает

Я новичок в PHP и пытаюсь преобразовать дату из регистрационной формы (в форме 01/01/2011) в Y-m-d, чтобы ее можно было сохранить в базе данных.

Читайте также:  Как настроить укулеле сопрано новичку самому

Это код, который у меня есть, почти уверен, что он работал раньше, но теперь он перестал работать. Любые идеи?

Я проверил, что печатает $_POST[‘dob’] , и это правильно, однако $correctformat печатает 1970-01-01 каждый раз.

Любая помощь будет принята с благодарностью.

4 ответа

Вы можете использовать DateTime :: createFromFormat (примечание PHP 5> = 5.3.0) вместо strtotime , поскольку strtotime принимает m/d/Y не d/m/Y

.1. Можете вы сказать, глядя на дату, есть ли у нее месяц или день раньше? Если вы не можете — как эта программа должна определять фактический порядок?

.2. эта операция требует самых простых манипуляций со строками, которые нужно изучить, если вы планируете стать пользователем PHP:

Порядок фрагментов зависит от фактического порядка частей даты

Как говорит Адам, strtortime () не существует, это должно быть strtotime ()

Вы действительно проверяли это с буквальной строкой «01.01.2011»? Некоторые из нас родились до 1970 года, что может вызывать некоторую путаницу (strtotime () генерирует 32-битное время Unix).

(имейте в виду, что strtotime интерпретирует xx / xx / xx [xx], используя числовой стиль мм / дд / гг [гг], а не европейское соглашение дд / мм / гг [гг]).

Источник

PHP strtotime() ничего не выводит

Почему strtotime() ничего не выводит сам по себе? Что-то не так с настройками сервера? Сервер: Apache/2.2.11 (Win32), PHP 5.2.10, версия клиента MySQL: 5.0.51a.

Вы ошибаетесь strtotime() за time() .

strtotime буквально соответствует времени, ему нужна строка для преобразования. во времени.

Возвращает временную метку успеха, FALSE в противном случае. Ранее, начиная с PHP 5.1.0, эта функция возвращала -1 при сбое.

Таким образом, он не может проверить эту временную строку.

strtotime ничего не выводит, btw: он возвращает false в случае ошибки; см. руководство :

Возвращаемые значения

Возвращает временную метку успеха, FALSE в противном случае. До PHP 5.1.0 это функция вернет -1 при сбое.

Что не выводит ничего, это echo : false считается пустой строкой, и ничего не выводится.

документация strtotime также дает допустимый диапазон для дат:

Примечание: действительный диапазон временной метки обычно от Пт, 13 декабря 1901 г. 20:45:54 UTC to Tue, 19 января 2038 03:14:07 UTC. (Это даты которые соответствуют минимуму и максимальные значения для 32-разрядной подписки целое.) Кроме того, не все платформы поддерживают отрицательные метки времени, поэтому ваш диапазон дат может быть ограниченный не ранее, чем Unix эпоха. Это означает, что, например, даты до 1 января 1970 года не будет работать Windows, некоторые дистрибутивы Linux и несколько других операционных систем. PHP 5.1.0 и более новые версии преодолевают это ограничение.

‘0000-00-00’ находится вне этого диапазона, поэтому он не считается действительной датой; следовательно, возвращаемое значение false .

Читайте также:  Amazfit bip не работает шагомер

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

В качестве bnus, используемого с Xdebug, вы получите отличный результат: -)

Источник

PHP strtotime не работает должным образом

Этот код не работает должным образом сегодня (30-10-2017). Почему?

Я хочу вернуться за несколько месяцев до $i .

Этот код работает правильно в последние дни .

3 ответа

Добавлено of в strtotime .

Неправильный синтаксис «первый день этого месяца» вместо «первый день этого месяца» интерпретируется как «+1 день».

Так как сегодня 30/10/2017, «+1 день» дает 31/10/2017.

Для $ i = 1 strtotime («- $ i month», «первый день этого месяца») возвращает за 1 месяц до 31/10/2017. Так как 31.09.2017 не существует, он возвращает дату на 01.10.2017. И вот месяц еще 10.

Вот почему он не работает, как ожидалось сегодня, но работал раньше.

Чтобы выяснить, почему это ведет себя так:

Эта строка внутренне считается эквивалентной

Поскольку этот месяц по сути бессмысленен (это всегда «в этом месяце»).

Сегодня это дает нам дату 2017-10-31 . Когда мы вычтем из этого один месяц, мы получим 2017-09-31 , который недопустим (в сентябре только 30 дней).

Внутренне, когда вы запрашиваете день после конца месяца, PHP переносится на следующий месяц, то есть 2017-10-01 . Сегодня (30 октября) tomorrow -1 month фактически равен первому дню того же месяца. Вы также столкнетесь с этой проблемой в конце марта, мая и декабря, так как они следуют месяцам с меньшим количеством дней, чем они сами.

Как упоминалось в других ответах, самый простой способ исправить это — добавить слово of , так как тогда вы всегда получите правильный ответ.

Источник

Оцените статью