我有一个使用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-FEB-2014')。
如何使用Oracle或PHP将这些格式合并为“YYYY-MM-DD”,以便此代码段可以正常运行:TO_DATE(document_dt, 'yyyy-mm-dd')
?
答案 0 :(得分:2)
$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"
答案 1 :(得分:0)
您可以使用正则表达式检查格式,然后使用\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
}
答案 2 :(得分: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;
答案 3 :(得分: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");
?>