Дата процесса, которая может быть в одном из двух форматов

У меня есть приложение PHP, которое использует HTML5 input type="date":

<input type="date" name="document_dt" id="document_dt" min="1899-12-30" max="2014-11-21" placeholder="mm/dd/yyyy" value="" maxlength="10" class="date">

Когда к системе обращаются через современные браузеры, этот элемент ввода выдает дату в формате YYYY-MM-DD,

Старые браузеры не поддерживают HTML5 и обрабатывают это поле даты как обычное поле ввода. В таких случаях, по унаследованным причинам вне моего контроля, ожидаемый формат DD-MON-YYYY (то есть: «28-ФЕВ-2014»).

Как я могу использовать Oracle или PHP для объединения этих форматов в «ГГГГ-ММ-ДД», чтобы этот фрагмент работал: TO_DATE(document_dt, 'yyyy-mm-dd')?

0

Решение

Использовать strtotime а также date функции.

$date1 = date('Y-m-d', strtotime('28-FEB-2014'));
$date2 = date('Y-m-d', strtotime('2014-05-28'));
var_dump($date1, $date2);

string(10) "2014-02-28"string(10) "2014-05-28"
2

Другие решения

Вы можете использовать регулярное выражение для проверки формата, а затем \DateTime::createFromFormat сделать преобразование в зависимости от того, какая строка у вас есть.

$date = false;
$dateString = '28-FEB-2014';

if (preg_match('/^[0-9]{2}-[A-Z]{3}-[0-9]{4}$/i', $dateString)) {
$date = \DateTime::createFromFormat('j-M-Y', $dateString);
} elseif (preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $dateString)) {
$date = \DateTime::createFromFormat('Y-m-d', $dateString);
}

if ($date) {
// do something with date
} else {
// invalid date
}
0

Это актуальная часть решения, которое я разработал в Oracle:

    IF document_dt IS NOT NULL THEN
BEGIN
v_document_dt:=TO_DATE(document_dt, 'yyyy-mm-dd');
EXCEPTION
WHEN OTHERS THEN
v_document_dt:=TO_DATE(document_dt, 'dd-mon-yyyy');
END;
ELSE
v_document_dt:=SYSDATE;
END IF;
0

Если два формата, то есть шаблоны, известны — это хорошо. Просто используйте PHP, чтобы определить, какой это формат даты, и проанализируйте его, как показано ниже:

<?php
function process_date($date)
{
if (preg_match('/^((0[1-9]|[12][012345678]|19)-(0[1-9]|1[012])|29-(0[13-9]|1[012])|30-(0[13-9]|1[012])|31-(0[13578]|1[02]))-(19|20)\d\d|29-02-(19|20)([02468][048]|[13579][26])$/', $date) === 1)
{
$d = explode("-", $date);
$date = $d[2]."-".$d[1]."-".$d[0];
}
return $date;
}

echo process_date("2011-12-13")."<br>";
echo process_date("28-11-2014");
?>
0
По вопросам рекламы [email protected]