【问题标题】:Guessing date format with PHP用PHP猜测日期格式
【发布时间】:2017-04-27 10:47:09
【问题描述】:

我在 HTML5 type="date" 字段中有一个网络表单的用户输入。然后这个输入的值(连同其他值)被保存为 MySQL 数据库中的 JSON 文档。现在我需要提取该日期并将其打印到生成的具有给定格式的 MS Word 文档中。伟大的!但正如您所知,HTML5 日期字段根据用户区域设置、设置等接受日期格式。我注意到在不同浏览器中输入的所有日期都以“Y-m-d”格式保存在数据库中。在所有情况下都是这样吗?我可以依赖这种格式以备将来使用吗?找不到有关该主题的任何规范信息。 如果可以依赖“Y-m-d”格式,是否有任何用于“猜测”日期格式的 PHP 库?

【问题讨论】:

    标签: php html date


    【解决方案1】:

    首先,您为什么将 JSON 文档保存在 MySQL 数据库中而不是一些更合适的文档数据库(例如 MongoDB)中?

    无论如何,基于thisthis,显示的日期格式与实际值不同。 HTTP 请求中的日期值会一直格式化为yyyy-mm-dd,也就是ISO 8601 格式,我猜应该是可靠的。

    在 PHP 中,您可以使用 DateTime 类处理日期字符串。此类支持许多不同的日期格式。例如:

    // timezone is set based on your system preferences if not set
    $date1 = new DateTime('2017-04-27', new DateTimeZone('+00:00'));
    $date2 = new DateTime('27 April 2017', new DateTimeZone('+00:00'));
    $date3 = new DateTime('2017-04-27T00:00:00+00:00');
    
    var_dump($date1 == $date2); // bool(true)
    var_dump($date1 == $date3); // bool(true)
    

    如果日期字符串错误,则抛出异常:

    try {
        $date = new DateTime('2017 4 27');
    } catch (Exception $e) {
        echo $e->getMessage(); // DateTime::__construct(): Failed to parse time string (2017 4 27) at position 5 (4): Unexpected character
    }
    

    因此,在您的情况下,您可以使用此类进行日期验证和正确的输出格式,例如:

    $dateString = '2017-04-27T14:22:11+00:00';
    try {
        $date = new DateTime($dateString);
        echo $date->format('Y-m-d'); // 2017-04-27
    } catch (Exception $e) {
        // do something else
    }
    

    【讨论】:

    • 感谢 Lukas 指向 MDN 和 Google Developers。看起来我在谷歌上搜索的太少,无法自己找到答案。最重要的部分是请求总是以 yyyy-mm-dd 形式发送。
    • 我的整个应用程序都依赖于 MySQL。但是我需要构建动态表单来输入硬拷贝文档属性。从 MySQL 5.7.6 开始的新 JSON 类型字段在扩展应用功能方面确实帮助了我很多。
    • 当有人提出问题时,他希望收到对他问题的实际回答。人们不需要对他们的发展选择进行评判。如果你对别人的选择有问题,那么问题就出在你自己身上。拜托,这个论坛的目的是为提出的问题提供解决方案,而不是让每个人的想法和行为都一样。任何人都可以选择数据库而不是其他数据库的原因有很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多