如何在 PHP 中将标准 AS400 CYMD 日期格式转换为 MDY?
Posted
技术标签:
【中文标题】如何在 PHP 中将标准 AS400 CYMD 日期格式转换为 MDY?【英文标题】:How can I convert the standard AS400 CYMD date format to MDY in PHP? 【发布时间】:2013-12-29 19:07:11 【问题描述】:我在 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 年之前的日期进行第二次数组排列?
【问题讨论】:
db2 有一个 to_char 函数,允许您将日期时间值转换为您选择的格式。 【参考方案1】:CYMD 日期具有世纪、年、月、日格式,cyymmdd,其中 c 为 0 表示 1928 年到 1999 年,为 1 表示 2000 年到 2071 年。
刚刚为你做的: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
【讨论】:
【参考方案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
【讨论】:
以上是关于如何在 PHP 中将标准 AS400 CYMD 日期格式转换为 MDY?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NewProxyConnection 类型转换为 AS400JDBCConnection