【问题标题】:PHP outputting incorrect datePHP输出不正确的日期
【发布时间】:2012-12-30 22:25:02
【问题描述】:

我有这个代码:

$date = substr($item[8], 7, 9);
$date = str_replace('/', '-', $date);

此时,$date 包含:

12-21-12  <---- December 21, 2012

现在我正在尝试将日期输出为输入 type="date" 友好的格式:

<input type="date" name="date" value="<?php echo date('Y-m-d', strtotime($date)); ?>">

但它不会正确输出。

如果我将 type="date" 更改为 type="text" 我会看到以下输出:

1969-12-31

显然有些东西在

中无法正常工作
date('m-d-Y', strtotime($date));

谁能帮我解决这个问题?

【问题讨论】:

  • 来自 PHP 文档 for strtotime:为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。
  • 我认为,除了您在答案中看到的内容之外,您还可以使用欧式连字符进行美式约会:codepad.org/mcKrN6DH

标签: php html forms date


【解决方案1】:

日期必须是Y-m-d 格式,而不是m-d-Y

【讨论】:

  • @JaredFarrish 不,是in the specification
  • 虽然它确实回答了问题,但这并不能解决问题。
  • 等一下,看代码;它被错误地发送到浏览器:codepad.org/mcKrN6DH 它可能被规则错误地格式化,但它也被错误地输出到了input
  • 贾里德是正确的。通过删除 $date = str_replace('/', '-', $date);问题解决了。
【解决方案2】:

如果您使用的是 PHP 5.3+,我鼓励使用 DateTime 类。

在你的情况下:

$date = DateTime::createFromFormat('m-d-y', '12-21-12');
echo $date->format('Y-m-d'); // 2012-12-21

strtotime('12-21-12') 所述,因为日期格式在月份和年份方面不明确。

【讨论】:

  • 我想我没有 php 5.3 因为 $date 不会回显任何东西。
  • @Jonathan,很不幸。看看 Matti 所指出的 strptime()
  • 好吧,PHP docs 确实说这是处理这些日期歧义的正确方法。不过,在第二行删除无用的交换确实是solves the issue
【解决方案3】:

删除

$date = str_replace('/', '-', $date);

解决问题。

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多