【问题标题】:PHP - Using strtotime with a UK date format (dd-mm-yy)PHP - 使用英国日期格式的 strtotime (dd-mm-yy)
【发布时间】:2010-11-12 10:23:13
【问题描述】:

在 PHP 中很简单,我的日期是 2011 年 1 月 8 日,格式为 08-01-11 - 当我将它运行到 strtotime 并将其转换回不同的日期格式时,它会恢复到 2011 年 8 月 1 日 - 不是理想!

有什么简单的方法可以解决这个问题,而不必将所有内容放入不同的数组/变量中然后再放回去?

谢谢!

【问题讨论】:

    标签: php date strtotime


    【解决方案1】:

    完美的解决方案是让美国首先使用正确的日期格式... ;0)

    我这样做是为了解决它:

    $date = "31/12/2012";
    $bits = explode('/',$date);
    $date = $bits[1].'/'.$bits[0].'/'.$bits[2];
    

    $date 现在是strtotimeable

    【讨论】:

    • 这确实有效,但来自 gregmacoy 的答案实现了同样的效果,而且要简单得多。
    【解决方案2】:

    来自 PHP 手册:

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

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

    我用破折号替换了斜杠,然后 strtotime 在英国日期按预期工作。

    【讨论】:

    • 完美答案。
    【解决方案3】:

    strtotime()works with US dates only:

    该函数期望得到一个包含美国英语日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳。

    您必须重新排列日期格式或使用 date_parse_from_format() (PHP 5.3+) 来解析英国风格的字符串。

    【讨论】:

    • @Nick 我明白了!那么explode("-", $date); 并重新排列数组可能是最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多