2016-02-01 2 views
3

Скажем, у меня есть этот код:strtotime() возвращает текущую дату с вводом DD.MM.YY - почему?

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() неспособным обрабатывать годы в двузначном формате?

EDIT: Чтобы уточнить, мне все еще нужна дата(), чтобы вывести год с 4 цифрами. Кажется, что strtotime() не принимает никаких данных с 2-значными годами и вместо этого возвращает временную метку текущей даты ...

+0

проверить местное время и настройки на сервере – Grumpy

+0

Возможно, эта страница может помочь вы: http://stackoverflow.com/questions/3626052/strtotime-with-year-in-2-digit-format –

ответ

1

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'); 
+0

Спасибо. Наконец, ответ, который проливает свет на мою проблему. Но как мне с этим справиться? У меня есть файл CSV, заполненный датами в формате dd.mm.yy, и я хочу автоматически их скопировать в формат dd.mm.yyyy. Так strtotime() не определяет формат dd.mm.yy ... любые альтернативы? – StrikeAgainst

+0

@StrikeAgainst: да есть способ ... проверить мой ответ ... я отредактировал –

+0

Работает как шарм. Спасибо! – StrikeAgainst

0

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

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

Прочтите мое редактирование выше – StrikeAgainst

+0

@StrikeAgainst обновите это эхо "12.07.16 -" .date ("dmY" , strtotime ("12.07.16")); быть у маленьким –

+0

Нет. Я все еще хочу, чтобы он погасил «12.07.2016». Вместо этого он возвращает «01.02.2016», что является текущей датой. – StrikeAgainst

1

Простая причина заключается в том, что Вам нужно взять небольшой "у" в следующем заявлении:

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

к

echo "12.07.16 - ".date("d.m.y", strtotime("12.07.16")); 
+0

Прочтите мое редактирование выше – StrikeAgainst

0

Вы используете «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 
+0

Прочтите мое редактирование выше – StrikeAgainst

+0

У меня есть ответ. проверьте это. – pratik

+0

Текущая временная метка тоже не то, что мне нужно ... Я хочу отформатировать «12.07.16» до «12.07.2016». strtotime() не позволит встретить, хотя. – StrikeAgainst

0

Он принимает 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")); 

 Смежные вопросы

  • Нет связанных вопросов^_^