【问题标题】:PHP date format vs Symfony RFC 3339 formatPHP 日期格式与 Symfony RFC 3339 格式
【发布时间】:2017-11-14 10:42:05
【问题描述】:

根据http://php.net/manual/en/class.datetime.php

PHP 遵循“ATOM”日期格式。要生成像“2017-11-14”这样的日期,我们需要日期格式字符串“Y-m-d”。我可以使用 php date 函数和类来生成它。它按预期工作。

/////Using date function////
echo date("Y-m-d");

/////Using DateTime class////
$date = new DateTime();
echo $date->format('Y-m-d');

现在我想在我的 Symfony3 应用程序中动态使用这些日期格式。根据文档,dateType 字段的格式必须符合“RFC3339”,因为它使用 IntlDateFormatter 类进行格式化。 https://symfony.com/doc/current/reference/forms/types/date.html#format

所以要产生与前一个相同的日期,我们需要不同的格式字符串

$date = new DateTime();
$dateFormat = new IntlDateFormatter(
    "en_US",
    IntlDateFormatter::NONE,
    IntlDateFormatter::NONE,
    'America/Los_Angeles',
    IntlDateFormatter::GREGORIAN,
    'yyyy-MM-dd'
);
echo $dateFormat->format($date->getTimestamp());

为了在我的表单上呈现 datepicker 字段,我使用了 bootstrap datepicker (https://bootstrap-datepicker.readthedocs.io/en/stable/options.html#format)。此处生成相同上一个日期的格式要求有点不同“yyyy-mm-dd”。

虽然我可以理解 datepicker 格式可以不同于 PHP 格式。但我无法理解为什么 PHP 和 symfony 日期格式要求之间存在差异。

我不确定如何使它工作,因为可以有很多格式,用户可以选择。所以用户选择他的日期格式偏好,我需要在任何地方生成相同的日期字符串。

我正在考虑一些转换器,它可以将 PHP 日期字符串转换为 symfony 和 javascript 格式,或者如果我可以设法更改 symfony 的 dateformatter,我认为它也会有所帮助。

【问题讨论】:

    标签: php symfony date datepicker rfc3339


    【解决方案1】:

    您混淆了 symfony 格式和 html5 格式。没有symfony格式,rfc参考html规范。

    对于您的前端,您应该:

    1. 创建一个 twig 过滤器,以用户格式首选项输出任何日期时间
    2. 使用 javascript 日期小部件而不是 html 日期输入。主要是因为html 日期小部件的格式无法更改,您将无法使用应用程序的用户格式偏好。它是以 RFC3339 格式提供给请求的格式:YYYY-mm-dd

    就是这样,你的控制器和模型应该只处理 Datetimes 对象

    【讨论】:

    • 这不可能是真的,因为我已经为这个字段禁用了 HTML5。以下是我使用的选项:'widget' => 'single_text', // do not render as type="date", to avoid HTML5 date pickers 'html5' => false, 'format' => 'yyyy-MM-dd', 'jsformat' => 'yyyy-mm-dd', jsformat 由 datepicker 使用
    • 通过 html 日期选择器还是外部的?
    • 我正在使用外部引导日期选择器。 bootstrap-datepicker.readthedocs.io/en/stable/…
    • symfony 使用不同于默认 PHP 的格式化程序,这很奇怪。甚至没有任何函数可以相互转换。
    • 我不明白格式有什么让您如此困扰。 yyyy-MM-dd是html格式,因为表单生成的输入是html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多