strtotime () возвращает текущую дату с вводом ДД.ММ.ГГ - почему?

Допустим, у меня есть этот код:

echo "12.07.2016 - ".date("d.m.Y", strtotime("12.07.2016"));
echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16"));

который возвращает это:

12.07.2016 - 12.07.2016
12.07.16 - 01.02.2016

Первая дата отформатирована правильно, вторая строка возвращает текущую дату - почему это происходит? Не может ли strtotime () обрабатывать годы в двузначном формате?

РЕДАКТИРОВАТЬ: Чтобы уточнить, я все еще хочу, чтобы date () выводила год с 4 цифрами. Просто кажется, что strtotime () не принимает никаких данных с двухзначным годом и вместо этого возвращает метку времени текущей даты ...


person StrikeAgainst    schedule 01.02.2016    source источник
comment
проверьте свое местное время и настройки на сервере   -  person Grumpy    schedule 01.02.2016
comment
Возможно, эта страница может вам помочь: stackoverflow.com/questions/3626052/   -  person The fourth bird    schedule 01.02.2016


Ответы (5)


string date ( string $format [, int $timestamp = time() ] )

Отметка времени: необязательный параметр timestamp представляет собой целочисленное значение отметка времени Unix, для которого по умолчанию используется текущее местное время, если отметка времени не указана.

Другими словами, по умолчанию используется значение time ().

Так что в вашем случае в строке echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16"));

Формат, который вы предполагали установить, был 12.07.2016, но вы указали 12.07.16, который был отброшен, поэтому для него была выбрана местная дата по умолчанию.

Вы можете сделать это, чтобы отформатировать

$datetime = DateTime::createFromFormat('d.m.y', '12.07.16');
echo $datetime->format('d.m.Y');
person Amar Singh    schedule 01.02.2016
comment
Спасибо. Наконец, ответ, проливающий свет на мою проблему. Но как мне с этим справиться? У меня есть файл CSV, заполненный датами в формате dd.mm.yy, и я хочу автоматически исправить их все до формата dd.mm.yyyy. Итак, strtotime () не определяет формат dd.mm.yy ... какие-либо альтернативы? - person StrikeAgainst; 01.02.2016
comment
@StrikeAgainst: да, есть способ ... проверьте мой ответ ... я редактировал - person Amar Singh; 01.02.2016
comment
Работает как шарм. Благодарю вас! - person StrikeAgainst; 02.02.2016
comment
@StrikeAgainst: отлично !! - person Amar Singh; 02.02.2016

Простая причина в том, что вам нужно взять маленькую букву «y» в следующем утверждении:

echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16"));

TO

echo "12.07.16 - ".date("d.m.y", strtotime("12.07.16"));
person Ketan Solanki    schedule 01.02.2016

y в виде небольшого двухзначного года возврата, поэтому ваш код может быть:

echo "12.07.2016 - ".date("d.m.Y", strtotime("12.07.2016"));
echo "12.07.16 - ".date("d.m.y", strtotime("12.07.16"));
person Gouda Elalfy    schedule 01.02.2016
comment
@StrikeAgainst обновите это эхо 12.07.16 - .date (d.m.Y, strtotime (12.07.16)); быть маленьким - person Gouda Elalfy; 01.02.2016
comment
Нет. Еще хочу его выпустить 12.07.2016. Вместо этого он возвращает 01.02.2016, то есть текущую дату. - person StrikeAgainst; 01.02.2016

Вы используете «Y», которое используется для форматирования YYYY.

вы должны попробовать этот код

echo "12.07.2016 - ".date("d.m.y", strtotime("12.07.2016"));// for YY format
echo "12.07.16 - ".date("d.m.Y", strtotime("12.07.16")); // for YYYY formate
echo $a = date("d-m-Y H:i:s",time()); // for current time stamp

Выход:

12.07.2016 - 12.07.16
12.07.16 - 01.02.2016
01-02-2016 12:16:12
person pratik    schedule 01.02.2016
comment
Текущая временная метка тоже не то, что мне нужно ... Я хочу отформатировать с 12.07.16 на 12.07.2016. strtotime () не позволит встретиться. - person StrikeAgainst; 01.02.2016
comment
Затем попробуйте этот код: - echo $ a = date (d-m-y H: i: s); - person pratik; 02.02.2016

Он принимает год из 2 цифр, если он написан правильно.

Пример:

echo $one = "12.07.2016 - ".date("d.m.Y", strtotime("12.07.2016"));
echo "</br>";
echo $two = "12.07.16 - ".date("d.m.Y", strtotime("16-07-12"));
person Monty    schedule 01.02.2016