【问题标题】:PHP : strtotime() returns always 01/01/1970PHP:strtotime() 总是返回 01/01/1970
【发布时间】:2023-03-03 18:30:01
【问题描述】:

我正在尝试使用strtotimeEuropean format (dd/mm/yyyy) 中显示日期,但它总是返回 01/01/1970。

这是我的代码:

echo "<p><h6>".date('d/m/Y', strtotime($row['DMT_DATE_DOCUMENT']))."</h6></p>";

在我的数据库中,该字段是一个 varchar,记录的格式类似于 yyyy.mm.dd

我对另一个格式为 yyyy-mm-dd(也是 varchar)的字段使用相同的代码行,它工作正常。

感谢您的帮助。

【问题讨论】:

  • 这可能是因为 strtotime 假定为 mm/dd/yyyy,如果您输入像 13/2/2012 这样的日期,它会抱怨没有第 13 个月并给您时间 0 (1/1/1970 )

标签: php date format strtotime


【解决方案1】:

由于yyyy-mm-dd 格式有效,请尝试将. 替换为-

date('d/m/Y', strtotime(str_replace('.', '-', $row['DMT_DATE_DOCUMENT'])));

【讨论】:

    【解决方案2】:

    尝试:

    $date = date_parse_from_format("Y.m.d", $row['DMT_DATE_DOCUMENT']);
    $time = mktime($date['hour'], $date['minute'], $date['second'], $date['month'], $date['day'], $date['year']);
    echo "<p><h6>".date('d/m/Y', $time)."</h6></p>";
    

    (使用date_parse_from_format() 代替strtotime()

    或者只是:

    $date = date_parse_from_format("Y.m.d", $row['DMT_DATE_DOCUMENT']);
    echo "<p><h6>{$date['day']}/{$date['month']}/{$date['year']}</h6></p>";
    

    【讨论】:

    • 是的,只是date不接受date_parse_from_format的直接输出。
    【解决方案3】:

    引用自the strtotime page in the PHP manual

    m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。

    为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或DateTime::createFromFormat()

    所以在你的情况下,它应该是格式 YYYY-MM-DD 或 d.m.y.

    如果您想解析自定义格式,请使用date_create_from_format

    例如,

    date_create_from_format('Y.m.d',$row['DMT_DATE_DOCUMENT'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多