为了账号安全,请及时绑定邮箱和手机立即绑定

日期验证 Codeigniter

日期验证 Codeigniter

PHP
侃侃无极 2022-12-03 18:26:23
我正在为我的控制器中的帖子创建验证。我对日期有疑问。我在应用程序/库中创建了一个 MY_Form_validation.php 页面,我在其中写道:public function valid_date($date, $format = 'Y-m-d') {    $d = DateTime::createFromFormat($date, $format);    return $d && $d->format($format) === $date;}然后我创建了 form_validation_lang.php<?php$lang['form_validation_valid_date'] = 'The field {field} is not a valid date';在我的控制器中,我有://load the libraries$this->form_validation->set_rules('birthdate', irthdate', 'trim|required|valid_date'); if($this->form_validation->run() == FALSE){            $errors = $this->form_validation->error_array();            var_dump($errors);            $this->response($errors, 500);             return;        }  $person = array(//..'birthdate' => $this->post('birthdate'),//...);它打印给我:'生日'=> '字符串'关于我的数据库,一开始我的领域是数据,我收到了这个错误。比我更改为 Datetime 但错误是一样的。现在是:birthdate日期不为空,例如,现在我试图发布一个像“1960-04-20”这样的日期,但我收到了错误消息:"birthdate": "字段 birthdate 不是有效日期"我只想在数据库中写入日期而不是时间,这可能是问题所在吗??我该怎么做才能验证日期?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

用下一个替换你的函数:


public function valid_date($date, $format = 'Y-m-d') { 

    $d = new DateTime($date); 

    return $d && $d->format($format) === $date;

}

演示


或者与下一个:


public function valid_date($date, $format = 'Y-m-d') { 

    $d = DateTime::createFromFormat($format,$date);   // <-- replace arguments

    return $d && $d->format($format) === $date;

}

演示


DateTime::createFromFormat() 文档


您需要在成功验证后将此字符串转换为 DATE 数据类型,然后才将其发送到数据库中。或者你可以写"to_date($stringvar,$format)"在你的 SQL 查询中。


似乎 CodeIgniter 不喜欢验证选项中的默认变量。我的意思是,你不能声明$format = 'Y-m-d'为参数。所以,如果你不使用它,它会起作用:


public function valid_date_dmY($str)

{    

        $d = DateTime::createFromFormat('d.m.Y',$str);    

        return $d && $d->format('d.m.Y') === $str; 

}


查看完整回答
反对 回复 2022-12-03
  • 1 回答
  • 0 关注
  • 58 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信