Symfony

时间:2016-01-01 16:57:28

标签: php symfony date datetime

在关于用户个人资料的Symfony表单中,我想以dd.MM.yyyy的形式呈现用户的生日,例如:31.05.1983。但是,我希望应用程序处理案例,其中用户没有优雅地输入生日的完整版本,例如:31.5.83应转换为31.05.1983

在表格中我添加了以下字段:

$form->add('dateOfBirth', 'birthday', [
    'input' => 'datetime',
    'view_timezone' => 'UTC',
    'format' => 'dd.MM.yyyy',
    'widget' => 'single_text',
    'required' => false,
])

注意:我添加了'view_timezone' => 'UTC'选项值,因为生日值被解析为DateTime(由Symfony)并转换为UTC(由我),我想避免因时区而导致的任何日期翻转转换。 PHP配置为默认时区CET,比UTC提前一小时。

当有人输入日期31.05.1983时,使用此表单字段一切正常。在规范化表单中,您将获得内容为DateTime的{​​{1}}。

但是,如果有人在此表单字段中输入1983-05-31 00:00:00,您将获得内容为31.5.83的{​​{1}}。注意:不仅年份设置为83,而且日期日期从31更改为28。

我可以理解年份部分,因为日期解析器无法确切知道这里的含义。但是,那天我无法理解。

我想实现以下行为:如果用户输入小于100的年份,则在DateTime事件处理程序中应用一些手动猜测逻辑。 (例如:如果输入的年份小于或等于当前年份的最后两位数字,则添加2000,否则添加1900.)

但是,如果我不能确定日期的日期和月份部分,那么我该如何正确“修复”这样的日期呢?

有人知道(优雅)解决这个问题吗?

0 个答案:

没有答案