我对PHP编程相当新,因此面临一个奇怪的问题,通过不同的论坛,我能够学习如何将不同格式的日期转换为我们想要的格式,但今天这是不可能的,我总是给01 Jan无论我在变量中给出了什么,这很奇怪,因为之前它工作得很好。我的代码如下:
我正在使用日期和strtotime PHP函数的组合,如:
$coll_date_1[$i] = $row->coll_date_1; //this is 08-08 i.e 8 Aug
$coll_date_1[$i] = date('d M',strtotime($coll_date_1[$i])); //this return 01 Jan
第1行将数据库中的值分配给变量,第2行是将它们转换为所需格式的函数。我知道我在做一个愚蠢的错误,但似乎无法确定那是什么......
答案 0 :(得分:3)
这是因为08-08
不是有效的日期格式。
您可以尝试在其前面添加“假”年,如2000-08-08
,或当前年份,如2013-08-08
,而不是
$coll_date_1[$i] = 'YEAR-'.$row->coll_date_1; // "YEAR" could be "2000" or the current year
date('d M', strtotime($coll_date_1[$i]));
无论如何,您应该更改数据库以正确格式处理日期,格式应为YYYY-MM-DD
,例如在MySQL中您使用date
类型字段。
编辑:
如果您无法更改数据库结构,但 PHP 5.3 + ,则可以使用DateTime
类将日期解析为
DateTime::createFromFormat('m-d', $row->coll_date_1)->format('d M');
答案 1 :(得分:2)
您可以使用DateTime::createFromFormat
指定格式:
$date = DateTime::createFromFormat("m-d","08-08")//Switch to "d-m" as needed
$date->format("d M");
这样可以更容易地更改格式之前和格式之后。
编辑:正如已经指出的那样。考虑将列存储为正确的日期或日期时间。这将允许您在需要时使用DB的日期函数。
答案 2 :(得分:0)
//这是08 - 08,即8月8日
虽然它应该是2013-08-08
将数据库字段更改为正确格式。问题解决了。