【问题标题】:Date issue: always shows 01 Jan rather than converting to desired Date [duplicate]日期问题:始终显示 01 Jan 而不是转换为所需的日期 [重复]
【发布时间】:2013-08-07 12:17:05
【问题描述】:

我对 PHP 编程相当陌生,因此面临一个奇怪的问题,通过不同的论坛,我能够学习如何将不同格式的日期转换为我们想要的格式,但今天这是不可能的,我总是得到 01 Jan 不管我在变量中给出了什么,这很奇怪,因为以前它工作得很好。我的代码如下:

我正在使用 date 和 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

第一行将数据库中的值赋给变量,第二行是将它们转换为所需格式的函数。我知道我犯了一个愚蠢的错误,但似乎无法指出那是什么......

【问题讨论】:

  • 那么09-08 是什么?
  • 为什么你的 DB 列中有这么奇怪的日期格式?您应该使用数据库的原生 DATETIME 列类型来存储日期。

标签: php javascript html database


【解决方案1】:

这是因为 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');

【讨论】:

  • 这个你说得对,这实际上解决了问题,但是你看我是开发人员,我前辈提到的数据库应该是这样的[主管要求],有什么解决方法超过这个,所以我可以得到 08 Aug 没有年份[或正确的格式]????
  • @blogger:查看我的编辑
【解决方案2】:

您可以使用DateTime::createFromFormat指定格式:

$date = DateTime::createFromFormat("m-d","08-08")//Switch to "d-m" as needed
$date->format("d M");

这样可以更轻松地更改前格式和后格式。

编辑:如前所述。考虑将您的列存储为适当的日期或日期时间。这将允许您在需要时使用 DB 的日期函数。

【讨论】:

  • 这行得通,尽管需要说明用户应该将日期正确存储在他们的数据库中,这样可以减少修复的需要。
  • @RickCalder 同意。我为此添加了注释。
  • 格式说明符与输出相同,只是m-d,不是mm-dd
  • @deceze 哎呀,你是对的。固定。
【解决方案3】:

//这是 08-08 即 8 月 8 日

虽然它应该是2013-08-08
将您的数据库字段更改正确格式。问题解决了。

【讨论】:

  • 虽然这是他应该做的,但从技术上讲,这不是手头问题的答案,是吗?我同意 SO 有经验的人应该做的一件事是为人们指明正确的方向,这仍然是一条评论。它不仅不处理问题,甚至不告诉用户如何做你说他应该做的事情。抱歉,-1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多