最近在作的项目!由于自已的无知时间处理上出了问题!要重新作一遍数据,4,5天的工作又白费了,这其间在论坛也发过贴也回过贴,发现一个问题!今天总结一下:
看上去很美
A:我的问题
在SQL Server 2000里看到的数据格式是:2004-03-02,我以为没有时间了!所以前期的php时间处理函数就没有考虑时间,最后测试的时候发现写到MySQL里的时间戳,算出来的时间与在SQL Server里的记录不符.由于数据不用在页面显示倒致工作白费,发现后我就在页面打印了一下,输出:
2004 三月 2 14:23
header("Content-Type=text/html;Charset=GBK");
发现问题了!原来在数据库中的格式只是为了显示方便,实际上日期是完整的,这其间QQ好友提示我打印显示和数据库中的记录有显示差别,找一个格式化函数,就可以搞定,刚学php对函数也不太熟,马上查手册,找了几遍也没有发现类似功能的函数,就在论坛发了一贴:
http://topic.csdn.net/u/20080610/13/27bee5f2-af07-4e3f-a75a-9f405fbd5549.html
huigenius兄弟给了一段代码:
function formatTimeStyle($strDate){
$search = array( '一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月' );
$replace = array( 1,2,3,4,5,6,7,8,9,10,11,12);
$date = str_replace($search,$replace,$strDate);
$darray = explode(' ',$date);
$date = array_pop($darray);
$date = implode('-',$darray);
return $date;
}
我稍微改了一下用来应对昨天的需求,在用户资料表里有个birthday列,数据显示同上面一样,在MySQL里需要的是:年 月 日 三个字段,我用上面的函数格式化一下:
$currStyle=formatTimeStyle($row[2])
来打印一下:
print $row[2]."
";
print $currStyle."
";
一定要记得对比一下输出!不然你不会发现下面的错误:
2004 三月 2 14:23
2004-3-2
看上去很美!,比起switch.让我们来看一下:str_replace函数的说明
在google搜一下:php str_replace
将某个子字符串都替换为另一个字符串(大小写不敏感)。
看英文的说明:
This function returns a string or an array with all occurrences of search in subject replaced with the given replace value.
我们按前三后四的法则再作个测试:
$test='2003 十一月 4 3:08';
print $test."
";
print formatTimeStyle($test)."
";
打印输出:
2003 十一月 4 3:08
2003-十1-4
哎!这怎么不对呀?再试一下:
$test='2003 十月 4 3:08';
print $test."
";
print formatTimeStyle($test)."
";
打印输出:
2003 十月 4 3:08
2003-10-4
正常呀!是不是眼花了?再试一下:
$test='2003 十二月 4 3:08';
print $test."
";
print formatTimeStyle($test)."
";
打印输出:
2003 十二月 4 3:08
2003-十2-4
你发现问题了么?上面的格式函数是不合格的!让我们少动一下:
function formatTimeStyle($strDate){
$search = array('十一月','十二月','一月','二月','三月','四月','五月','六月','七月','八月','九月','十月');
$replace = array(11,12,1,2,3,4,5,6,7,8,9,10);
$date = str_replace($search,$replace,$strDate);
$darray = explode(' ',$date);
$date = array_pop($darray);
$date = implode('-',$darray);
return $date;
}
再来测一下原来错误的测试用例:
$test='2003 十二月 4 3:08';
print $test."
";
print formatTimeStyle($test)."
";
打印输出:
2003 十二月 4 3:08
2003-12-4
再是原来正常的测试用例:
$test='2003 十月 4 3:08';
print $test."
";
print formatTimeStyle($test)."
";
打印输出:
2003 十月 4 3:08
2003-10-4