【问题标题】:Date format conversion results wrong date [duplicate]日期格式转换结果错误日期[重复]
【发布时间】:2013-07-31 00:39:55
【问题描述】:

我尝试转换

12-18-1997

18-12-1997

使用此代码

$new_date = date('d-m-Y', strtotime('12-18-1997'));

但它会导致18-12-1969

如果我必须转换完整日期和时间,那么它的转换很好,但在我发布的日期没有时间。

【问题讨论】:

  • 请不要将其标记为重复。如果我必须将完整日期与时间一起转换,那么它的转换很好,但在我发布的日期没有时间。

标签: php date type-conversion


【解决方案1】:

strtotime 很好,但它不是通灵的或无所不知的。你给它一个无法正确解析的时间字符串:

php > var_dump(strtotime('12-18-1997'));
bool(false)

由于您只是假设它成功了,因此您将 false 反馈给 date(),将其类型转换为整数 0。但是,您的结果是不可能的,因为 int 0 作为日期是 1970 年 1 月 1 日.使用时区转换,您可以使用 31-12-1969不是 18-12

如果您无法为 strtotime 提供它理解的格式,则使用 date_create_from_format 并告诉它格式是什么:

$date = date_create_from_format('m-d-Y', '12-18-1997');
$text = date('d-m-Y', $date);

【讨论】:

  • 错误来了。调用未定义的函数 date_create_from_format()
  • 那你的PHP版本太旧了。绝对是时候升级了。
  • 我从 cpanel 检查了程序版本。那里的PHP版本是:5.3.24
  • 那么在你的 php 安装中有些东西很奇怪,因为 datetime 是在 5.3.0 中添加的
【解决方案2】:

使用DateTime 代替strtotime()

$date = DateTime::createFromFormat( 'm-d-Y', '12-18-1997');
echo $date->format( 'd-m-Y');

你可以从this demo看到它打印出来:

18-12-1997

【讨论】:

  • 我收到此错误。致命错误:调用未定义的方法 DateTime::createFromFormat()
  • @ImranTariq - 那么 PHP 版本比 5.3 还旧,是时候升级了。
  • 我从 cpanel 检查了程序版本。那里的PHP版本是:5.3.24
猜你喜欢
  • 1970-01-01
  • 2018-01-02
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多