我在PHP中做了很多查询。我正在显示来自这些查询的信息,但我想将日期格式更改为程序员以外的人可以轻松阅读的内容。目前我已经能够使用这个:
$compdt = str_split($fin47['COMPDT']);
$compdt = "$compdt[3]$compdt[4]/$compdt[5]$compdt[6]/$compdt[1]$compdt[2]"
以上作品很棒。例如,从数据库中,我将其返回日期:
1090225
在我完成数组和字符串排列后,我得到了这个:
02/25/09
但是,当我从数据库返回的2000年前日期如下:
960614
我在字符串安排后得到这个:
61/4/60
这显然是不正确的,因为世纪数不存在,而且年份为零。
我刚刚参加了一些2000年前的日期,并且所有格式都已关闭。有没有简单的方法可以翻转日期,还是我必须为2000年以前的日期安排第二次排列?
答案 0 :(得分:2)
<强> CYMD 强> 日期有世纪,年,月,日格式,cyymmdd,其中c为1928年至1999年为0年,2000年至2071年为1年。
刚刚为你做到了:http://ideone.com/6MQmWk
<?php
function cymdToTime($d) {
$matches = null;
preg_match('/^(\\d*)?(\\d\\d)(\\d\\d)(\\d\\d)$/', $d, $matches);
return strtotime( (($matches[1] + 19) * 100 + $matches[2]) . '-' . $matches[3] . '-' . $matches[4]);
}
echo strftime('%B %d, %Y', cymdToTime(960614)); // June 14, 1996
echo strftime('%B %d, %Y', cymdToTime(1090225)); // February 25, 2009
答案 1 :(得分:2)
可以使用简单的UDF在主机上将CYMD转换为SQL DATE格式:
CREATE FUNCTION QGPL.CYMDTODATE(IN DEC(7)) RETURNS DATE
LANGUAGE SQL
DETERMINISTIC
RETURNS NULL ON NULL INPUT
BEGIN
RETURN(DATE(
SUBSTR(DIGITS(19000000+IN),2,4) || '-' ||
SUBSTR(DIGITS(IN),4,2) || '-' ||
SUBSTR(DIGITS(IN),6,2)));
END
可以像这样使用:
SELECT QGPL.CYMDTODATE(COMPDT) COMPDT
FROM MYLIB.MYTABLE