2014-02-14 2 views
1

Я очень стараюсь сделать некоторые проверки даты. Я создал как 3 разные функции, все они работают, но не в особых случаях.Дата выдачи текущей даты

Последнее, что я сделал это:

public function valid_date($date, $format = 'd/m/Y'){ 
    $d = DateTime::createFromFormat($format, $date); 
    return $d && $d->format($format) == $date; 
} 

Я получил эту функцию из PHP-сайте, и, как я думал, что это работало лучше, чем у меня, я заменил его.

Формат даты пользователь должен ввести в дд/мм/гггг и в формате базы данных является гггг-мм-дд 00:00:00

Когда я ввести эту неверную дату: 30/30/1996 функция распознает его как действительную дату. Тогда у меня есть эта другая функция, чтобы взорвать «/» и сделать ее как формат базы данных с «-», и в этой функции она дает мне ошибку:

DateTime :: __ construct(): Не удалось проанализировать время строка (1996-30-30) в положении 6 (0): Неожиданный символ»

public function explodingDates($date){  
    list($day,$month,$year) = explode('/', $date); 
    $newDate = $year.'-'.$month.'-'.$day; 
    return (new \Datetime($newDate)); 
} 

горю мой мозг здесь, не знаю, что еще нужно сделать для проверки. Он также должен быть готов получить любые входные данные (например, «askhdakjdh», «123213», «1.25/269») и вернуть недопустимую дату.

Заранее благодарен

+0

@ Fred-II- Короче: * shouln't *. Предлагаете ли вы назначить выражение? – BlitZ

+0

В обратном случае есть «\», это опечатка? – Wilmer

+0

@ Fred-ii- почему публика вызывает ошибку? – Limon

ответ

1

Не взорвать строчки даты. Используйте DateTime::createFromFormat() создать объект DateTime, и использовать метод format(), чтобы преобразовать его в другой формат:

function ConvertToMySQLDate($datestr) { 
    $d = DateTime::createFromFormat('d/m/Y', $datestr); 
    $valid = $d && $d->format('d/m/Y') == $datestr; 
    if ($valid) { 
     return $d->format('Y-m-d'); 
    } 
    return FALSE; 
} 

выше функция принимает строку даты в формате dddd-mm-yyyy, проверяет, действительно, и возвращает дату в формате MySQL (yyyy-mm-dd). Он возвращает false, если указанная дата недействительна.

Пример использования:

var_dump(ConvertToMySQLDate('30/30/1996')); // bool(false) 
var_dump(ConvertToMySQLDate('13/12/1996')); // string(10) "1996-12-13" 

Demo

+0

Что относительно будущих дат? Я пробовал это и работал со всем, что я упомянул. Но дата: 28/03/2014 дает мне ошибку – Limon

+1

@Limon: Какая у вас ошибка? Это [отлично работает для меня] (https://eval.in/101712). –

+0

@amal, Пожалуйста, объясните, что означает эта линия. Я не мог получить структуру. $ d && $ d-> format ('d/m/Y') == $ datestr. Будет ли это рассматриваться как цикл If? – Pravin

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