2011-12-17 2 views
1

Проблема с датой функцииPhp результат дата функция неверна

выход: 00:00 утра в воскресенье 17 декабря, 2011

Проблема час и минуты всегда показывать 00:00 и когда-то год также неправильно

дата ('Ymd H: i: s', time());

функции

public function perfect_date_format($date) { 
    $dated = str_replace(array(" ", ":"), "-", $date); 
    list($year, $month, $day, $hour, $minute) = explode("-", $date); 
    $niceday = @date("H:ia \o\\n\ l, F jS, Y", mktime($hour, $minute, 0, $month, $day, $year)); 
    return $niceday; 
    } 
+1

Что такое ввод? И вы пробовали 'strtotime()'? –

+0

Какой желаемый результат? – Asaph

+1

Вы можете предоставить свой образец ввода? – hungneox

ответ

3

У вас есть опечатка. Второй аргумент explode() должен быть $dated, а не $date. Если вы это сделаете, время будет отображаться правильно.

<?php 
function perfect_date_format($date) { 
    $dated = str_replace(array(" ", ":"), "-", $date); 
    list($year, $month, $day, $hour, $minute) = explode("-", $dated); 
    $niceday = @date("H:ia \o\\n\ l, F jS, Y", mktime($hour, $minute, 0, $month, $day, $year)); 
    return $niceday; 
} 

echo perfect_date_format('2011-12-17 03:45:00') . "\n"; 
?> 

Это выходы:

03:45am on Saturday, December 17th, 2011 

BTW: Это безопасно удалить error suppressor operator (т.е. @.) В приведенном выше коде. Это просто подавляло ошибки или предупреждения, вызванные ошибкой, указанной выше. Теперь, когда ошибка исправлена, @ ничего не делает.

+0

Демонстрация: http://codepad.org/GGKoabbT –

+1

Приятный улов @ Асаф, и ваш ответ оставляет исходный код неповрежденным, тогда как я полностью переписал его функцию. +1. – Josh

+1

Я дал оба надстройки, но я бы предпочел метод 'strtotime()', поскольку он позволяет больше разнообразия ввода (в зависимости от использования). Я также, вероятно, предлагаю удалить подавитель ошибок в 'date()'. –

1

Это очень трудно понять, жарко, чтобы исправить свой код, не зная, что вы передаете в perfect_date_format, но я сделаю дикое предположение и предположим, что strtotime понимает, как разобрать ваш $date:

public function perfect_date_format($date) { 
    $time = strtotime($date); 
    return date("H:ia \o\\n\ l, F jS, Y", $time); 
} 

Если это не работает, то просьба указать формат данных, которые вы переходящее в $date.

+1

Демо-версия: http://codepad.org/prOR1vnA –

+0

Спасибо @JaredFarrish! – Josh

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