Php 使用文本框输入日期

Php 使用文本框输入日期,php,cakephp,cakephp-2.2,Php,Cakephp,Cakephp 2.2,摆脱这三个元素并允许用户只在常规控件中键入日期的标准方法是什么 要求包括: 日期格式必须为D/M/Y 必须正确打印现有日期 无法中断日期验证 我找不到任何关于这方面的合理文档,只不过是像我xD这样无知的用户编写的论坛线程中的黑客攻击 澄清:请注意CakePHP标记。我已经知道如何在普通PHP中处理日期。我需要关于可以用来调整框架默认功能的精确CakePHP机制的帮助(我真正的意思是调整而不是覆盖) 到目前为止,我已经在模型中添加了以下内容: public $validate = array(

摆脱这三个
元素并允许用户只在常规
控件中键入日期的标准方法是什么

要求包括:

  • 日期格式必须为D/M/Y
  • 必须正确打印现有日期
  • 无法中断日期验证
我找不到任何关于这方面的合理文档,只不过是像我xD这样无知的用户编写的论坛线程中的黑客攻击

澄清:请注意CakePHP标记。我已经知道如何在普通PHP中处理日期。我需要关于可以用来调整框架默认功能的精确CakePHP机制的帮助(我真正的意思是调整而不是覆盖)

到目前为止,我已经在模型中添加了以下内容:

public $validate = array(
    'fecha' => array(
        array(
            'rule' => 'notEmpty',
            'required' => true,
        ),
        array(
            'rule' => array('date', 'dmy'),
        ),
    )
);
。。。我在视图中合成了如下字段:

echo $this->Form->input(
    'Foo.fecha',
    array(
        'type' => 'text',
    )
);

。。。但我所能做的就是读取和验证用户输入:它无法正确打印以前的日期,也无法正确存储新日期。

唯一可能的方法是让用户键入他想做的任何事情,然后在提交表单或其他内容时检查其有效性。或者更好的方法是使用jQuery datepicker。

唯一可能的方法是让用户键入他想做的任何事情,然后在他想提交表单或其他东西时检查其有效性。或者更好的方法是使用jQuery datepicker。

以防使用帮助器编写输入字段, 对于
formhelper
input
方法,有一个
type
选项。 试试这个,例如:

<?php
echo $this->Form->input('birth_dt', array(
    'type'  => 'text',
    'label' => 'Date of birth',
));

以防使用帮助器编写输入字段,
对于
formhelper
input
方法,有一个
type
选项。 试试这个,例如:

<?php
echo $this->Form->input('birth_dt', array(
    'type'  => 'text',
    'label' => 'Date of birth',
));

以下是我的发现摘要。似乎正在使用适当的机制在两种日期格式之间切换:

  • 数据库格式,例如:
    2012-08-28
  • 显示格式,例如:
    28/08/2012
步骤:

  • 将两个实用程序方法添加到
    AppModel
    以在我的自定义格式(也称为“显示格式”)和MySQL的默认格式(也称为“DB格式”)之间进行转换
  • 在我的模型中添加一个
    afterFind()
    过滤器,当从数据库读取时,该过滤器将转换为显示格式
  • 将表单控件呈现为
    'type'=>'text'
  • 'rule'=>数组('date','dmy')
    验证规则添加到模型内的字段中
  • 在我的模型中添加一个
    beforeSave()
    过滤器,该过滤器在保存之前转换为DB格式
  • 这些步骤可以用一个实现
    afterFind()
    beforeSave()
    回调的函数来封装,可能还有一些类似于
    beforeFind()
    的函数。该行为可直接应用于
    AppModel
    ,并将负责遍历数据数组以在两种格式之间转换日期(如果模型具有附表)。代码不是琐碎的,但是可以完成,并且它使它变得透明

    缺点:

    • 只生成MySQL代码(但是,它不是已经是MySQL了吗?)
    • 使其难以本地化
    • 如果你需要做日期数学,你会发现自己有人类可读的字符串
    如果能够使用三种格式,将会更加坚如磐石:

    • 数据库格式,例如:
      2012-08-28
    • 显示格式,例如:
      28/08/2012
    • PHP内部格式,例如Unix时间戳或
      DateTime
      对象

    遗憾的是,CakePHP内核并不是为此而设计的,如果您试图以这种方式实现它,那么它就会变得太复杂。

    下面是我的研究结果的总结。似乎正在使用适当的机制在两种日期格式之间切换:

    • 数据库格式,例如:
      2012-08-28
    • 显示格式,例如:
      28/08/2012
    步骤:

  • 将两个实用程序方法添加到
    AppModel
    以在我的自定义格式(也称为“显示格式”)和MySQL的默认格式(也称为“DB格式”)之间进行转换
  • 在我的模型中添加一个
    afterFind()
    过滤器,当从数据库读取时,该过滤器将转换为显示格式
  • 将表单控件呈现为
    'type'=>'text'
  • 'rule'=>数组('date','dmy')
    验证规则添加到模型内的字段中
  • 在我的模型中添加一个
    beforeSave()
    过滤器,该过滤器在保存之前转换为DB格式
  • 这些步骤可以用一个实现
    afterFind()
    beforeSave()
    回调的函数来封装,可能还有一些类似于
    beforeFind()
    的函数。该行为可直接应用于
    AppModel
    ,并将负责遍历数据数组以在两种格式之间转换日期(如果模型具有附表)。代码不是琐碎的,但是可以完成,并且它使它变得透明

    缺点:

    • 只生成MySQL代码(但是,它不是已经是MySQL了吗?)
    • 使其难以本地化
    • 如果你需要做日期数学,你会发现自己有人类可读的字符串
    如果能够使用三种格式,将会更加坚如磐石:

    • 数据库格式,例如:
      2012-08-28
    • 显示格式,例如:
      28/08/2012
    • PHP内部格式,例如Unix时间戳或
      DateTime
      对象

    可悲的是,CakePHP内核并不是为此而设计的,如果您试图以这种方式实现它,它就会变得太复杂。

    您可以自己创建表单,而不必使用CakePHP的“自动表单生成器”,这会打破使用框架的概念,不是吗?该框架并不“灵活”,我责备这个框架:)@OfirBaruch——这个框架非常灵活,但你需要知道如何使用它。他得到多个选择框的原因可能是因为DB中的表被设置为DATETIME。要获取常规文本框-