Есть ли простой способ конвертировать один формат даты в другой формат даты в PHP?
У меня есть это:
$old_date = date('y-m-d-h-i-s'); // works
$middle = strtotime($old_date); // returns bool(false)
$new_date = date('Y-m-d H:i:s', $middle); // returns 1970-01-01 00:00:00
Но я бы, конечно, хотел бы вернуть текущую дату, а не рассвет. Что я делаю не так?
Ответы:
Второй параметр
date()
должен быть правильной отметкой времени (секунды с 1 января 1970 г.). Вы передаете строку, которую date () не может распознать.Вы можете использовать strtotime () для преобразования строки даты в метку времени. Однако даже strtotime () не распознает
y-m-d-h-i-s
формат.PHP 5.3 и выше
Использование
DateTime::createFromFormat
. Это позволяет вам указать точную маску - используяdate()
синтаксис - для анализа дат входящей строки.PHP 5.2 и ниже
Вам нужно будет проанализировать элементы (год, месяц, день, час, минута, секунда) вручную с помощью
substr()
и передать результаты в mktime (), которая создаст временную метку.Но это много работы! Я рекомендую использовать другой формат, который strftime () может понять. strftime () понимает любой ввод даты, кроме
the next time joe will slip on the ice
. например, это работает:источник
DateTime
существует, поскольку PHP 5.2 в ядре PHP и экспериментальная поддержкаDateTime
может быть включена для PHP 5.1 при компиляции. secure.php.net/manual/en/datetime.installation.phpСамый простой способ сделать это
Сначала вы даете ему формат, в котором находится $ dateString. Затем вы сообщаете ему формат, в котором вы хотите, чтобы $ newDateString находился.
Это также позволяет избежать использования strtotime, с которым иногда бывает сложно работать.
Если вы не переходите из одного формата даты в другой, а просто хотите текущую дату (или дату-время) в определенном формате, тогда это еще проще:
Этот другой вопрос также относится к той же теме: конвертировать формат даты гггг-мм-дд => дд-мм-гггг .
источник
$timestring = $now->format('Y-m-d h:i:s');
конечно?m
месяцами,i
минутамиОсновы
Самый простой способ конвертировать один формат даты в другой - использовать
strtotime()
сdate()
.strtotime()
преобразует дату в метку времени Unix . Эта временная метка Unix может быть затем переданаdate()
для преобразования ее в новый формат.Или как однострочник:
Имейте в виду, что
strtotime()
дата должна быть в правильном формате . Еслиstrtotime()
вы не укажете правильный формат, вы вернете false, что приведет к вашей дате 1969-12-31.С помощью
DateTime()
Начиная с PHP 5.2, PHP предлагал
DateTime()
класс, который предлагает нам более мощные инструменты для работы с датами (и временем). Мы можем переписать приведенный выше код, используяDateTime()
так:Работа с метками времени Unix
date()
принимает timeatamp Unix в качестве второго параметра и возвращает отформатированную дату для вас:DateTime () работает с временными метками Unix, добавляя
@
перед временной меткой:Если у вас есть метка времени в миллисекундах (она может заканчиваться
000
и / или метка времени имеет длину тринадцать символов), вам потребуется преобразовать ее в секунды, прежде чем вы сможете преобразовать ее в другой формат. Есть два способа сделать это:substr()
Обрезка последних трех цифр может быть достигнута несколькими способами, но использовать
substr()
проще всего:Вы также можете преобразовать отметку времени в секунды, разделив ее на 1000. Поскольку отметка времени слишком велика для математических вычислений 32-битных систем, вам потребуется использовать библиотеку BCMath для выполнения математических вычислений в виде строк:
Чтобы получить метку времени Unix, вы можете использовать,
strtotime()
которая возвращает метку времени Unix:С DateTime () вы можете использовать
DateTime::getTimestamp()
Если вы используете PHP 5.2, вы можете использовать
U
вместо этого параметр форматирования:Работа с нестандартными и неоднозначными форматами даты
К сожалению, не все даты, с которыми разработчик должен работать, имеют стандартный формат. К счастью, PHP 5.3 предоставил нам решение для этого.
DateTime::createFromFormat()
позволяет нам сообщить PHP, в каком формате находится строка даты, чтобы ее можно было успешно проанализировать в объект DateTime для дальнейших манипуляций.В PHP 5.4 мы получили возможность делать доступ к членам класса при создании экземпляра, что позволяет нам превращать наш
DateTime()
код в однострочник:источник
Попробуй это:
источник
Для преобразования
$date
изdd-mm-yyyy hh:mm:ss
к правильному MySQL DateTime Я иду , как это:источник
Fatal error: Call to a member function format() on a non-object
. Просто на голову!Ниже приведен простой способ преобразования дат в разные форматы.
источник
Вы делаете неправильно здесь, это должно быть
разделитель времени ':'
Я думаю, что это поможет ...
ИЛИ
источник
Этот собственный способ поможет преобразовать любой введенный формат в желаемый формат.
источник
Вам необходимо преобразовать $ old_date обратно в метку времени, так как функция даты требует метку времени в качестве второго аргумента.
источник
strtotime решит это. даты просто не совпадают и все в американском формате.
источник
Попробуй это:
источник
Это решено для меня,
Выходные данные: 2018-04-18
источник
Это другой способ конвертировать формат даты
источник
Просто использование строк, для меня это хорошее решение, меньше проблем с MySQL. Определяет текущий формат и изменяет его при необходимости, это решение предназначено только для испанского / французского и английского форматов без использования функции php datetime.
ИСПОЛЬЗОВАНИЕ
источник
Я знаю, что это старо, но, столкнувшись с поставщиком, который непоследовательно использует 5 различных форматов даты в своих API (и тестирует серверы с различными версиями PHP от 5 до последних 7), я решил написать универсальный конвертер, который работает с множеством версий PHP.
Этот преобразователь будет принимать практически любой ввод, включая любой стандартный формат даты и времени (в том числе с или без миллисекунд) и любое представление времени эпохи (в том числе с или без миллисекунд), и преобразовывать его практически в любой другой формат.
Чтобы назвать это:
Отправка нуля для формата заставит функцию возвращать дату и время в эпоху / Unix. В противном случае отправьте любую строку формата, которую поддерживает date (), а также ".u" для миллисекунд (я также обрабатываю миллисекунды, даже если date () возвращает нули).
Вот код:
Вот несколько примеров звонков - вы заметите, что он также обрабатывает любые данные часового пояса (хотя, как отмечено выше, любое время, отличное от GMT, возвращается в вашем часовом поясе).
Вот вывод:
Единственное, чего нет в этой версии, - это возможность выбрать часовой пояс, в котором вы хотите, чтобы возвращаемая дата и время были. Изначально я написал это, чтобы изменить любое время и дату на Epoch Time, поэтому мне не нужна была поддержка часового пояса. Это просто добавить, хотя.
источник