代码之家  ›  专栏  ›  技术社区  ›  Daren Thomas

如何最好地将CakePHP日期选择器表单数据转换为PHP DateTime对象?

  •  3
  • Daren Thomas  · 技术社区  · 16 年前

    我是在家里做的 app/views/mymodel/add.ctp :

    <?php echo $form->input('Mymodel.mydatefield'); ?>
    

    app/controllers/mymodel_controller.php :

    function add() {
        # ... (if we have some submitted data)
        $datestring = $this->data['Mymodel']['mydatefield']['year'] . '-' .
                      $this->data['Mymodel']['mydatefield']['month'] . '-' .
                      $this->data['Mymodel']['mydatefield']['day'];
        $mydatefield = DateTime::createFromFormat('Y-m-d', $datestring);
    }
    

    绝对没有 为了更好地做到这一点-我只是还没有找到CakePHP的方法。。。

    我想做的是:

    function add() {
        # ... (if we have some submitted data)       
        $mydatefield = $this->data['Mymodel']['mydatefiled']; # obviously doesn't work
    }
    
    2 回复  |  直到 16 年前
        1
  •  6
  •   mga226    11 年前

    我知道这是一个老问题,但万一有人来找答案:CakePHP的泛型 Model ::deconstruct() ,用于在内部处理此必要逻辑。你可以这样使用它:

    $stringDate = $this->MyModel->deconstruct('fieldname', $arrayDate)
    
        2
  •  4
  •   Matthew Groves    16 年前

    你可以写一个助手 $this->data['Mymodel']['mydatefiled'] 作为参数,假设年/月/日在数组中,并相应地进行分析:

    <?php
    /* /app/views/helpers/date.php */
    class DateHelper extends AppHelper {
        function ParseDateTime($dateField) {
             $datestring = $dateField['year'] . '-' .$dateField['month'] . '-' . $dateField['day'];
             return DateTime::createFromFormat('Y-m-d', $datestring);
        }
    }
    ?>
    

    或者类似的。我想DateTime对象是在…PHP5.2中添加的?cakephp1.x是针对php4兼容性的,所以我认为没有任何“CakePHP方法”可以做到这一点,至少对于1.x来说是这样。

    推荐文章