簡體   English   中英

如何將ZF2 DateSelect“ day”元素格式化為2位?

[英]How to format ZF2 DateSelect “day” element to 2 digits?

我想對出生日期做一個出生日期組合下拉列表(即三個下拉列表-一個下拉列表,一天,一個月份,一個年份)。 有用的是,ZF2內置了一個名為DateSelect元素。

這是我將其添加到表單的方式:

    $this->add([
        'name' => 'date_of_birth',
        'type' => 'DateSelect',
        'attributes' => [
            'required' => true,
            'value' => date('Y-m-d', strtotime('18 years ago')),
        ],
        'options' => [
            'label' => 'Date of Birth',
            'max_year' => date('Y', strtotime('18 years ago')),
        ],
    ]);

要渲染我正在做的表單:

echo $this->form($form);

無論如何, day元件被渲染在j格式 (該月的當天,即沒有前導零131 )。

如何告訴元素以d格式呈現日期(即月份中的日期,前導零為0131 2位數字)?

我從Zend\\Form\\Element\\DateSelect檢查了源代碼,它是視圖助手Zend\\Form\\View\\Helper\\FormDateSelect 渲染日期位於視圖助手上,但未使用date('j') 它使用IntlDateFormatter格式化日期,並根據給定的locale日期格式模式輸出日期格式。

https://github.com/zendframework/zend-form/blob/release-2.2.0/src/View/Helper/FormDateSelect.php#L90

因此,該解決方案我們應該傳遞使用兩位數日( dd )的語言環境日期格式。 有關國家日期格式列表,請在此處查看

https://zh.wikipedia.org/wiki/日期格式_by_country

根據上面列出的日期格式, 印度使用DD-MM-YY作為日期格式。 我們可以使用此locale獲取兩位數的日期格式。

因此,請在您的視圖助手中使用它

echo $this->formDateSelect($form->get('date_of_birth'), IntlDateFormatter::MEDIUM, 'en_IN');

視圖幫助程序Zend\\Form\\View\\Helper\\FormDateSelect具有函數getPattern ,該函數通過使用IntlDateFormatter類來生成IntlDateFormatter

$intl           = new IntlDateFormatter($this->getLocale(), $this->dateType, IntlDateFormatter::NONE);
$this->pattern  = $intl->getPattern();

似乎沒有在元素級別設置模式的任何方法,因此我擴展了此視圖幫助程序,以允許我指定自己的模式:

<?php
namespace RPK\Form\View\Helper;

use Zend\Form\View\Helper\FormDateSelect as ZendFormDateSelect;

class FormDateSelect extends ZendFormDateSelect
{
    /**
     * Parse the pattern
     *
     * @param  bool $renderDelimiters
     * @return array
     */
    protected function parsePattern($renderDelimiters = true)
    {
        //Replace `day` value of "d" with "dd"
        $pattern = parent::parsePattern($renderDelimiters);
        if($pattern['day'] === 'd') {
            $pattern['day'] = 'dd';
        }
        return $pattern;
    }
}

從根本上講,這采用返回的模式數組( ['day'=>'d', 'month' => 'MMMM', 'year' => 'yyyy'] ),檢查day的值是否為單個字母“ d”,如果是,則將其替換為double -d。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM