日期问题:始终显示01年1月而不是转换为所需日期

时间:2013-08-07 12:17:06

标签: php javascript html database

我对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行是将它们转换为所需格式的函数。我知道我在做一个愚蠢的错误,但似乎无法确定那是什么......

3 个答案:

答案 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 将数据库字段更改正确格式。问题解决了。