【问题标题】:Checking date issue检查日期问题
【发布时间】:2014-03-14 05:17:17
【问题描述】:

我正在努力进行一些日期验证。我创建了 3 个不同的函数,它们都可以工作,但在特殊情况下不行。

我做的最后一件事是:

public function valid_date($date, $format = 'd/m/Y'){
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

我从 php 站点获得了这个函数,我认为它比我的更好,所以我替换了它。

用户必须输入的日期格式为 dd/mm/YYYY,数据库格式为 yyyy-mm-dd 00:00:00

当我输入这个无效日期:30/30/1996 时,该函数将其识别为有效日期。然后我有另一个函数来分解“/”并使它像带有“-”的数据库格式,在那个函数中它给了我错误:

DateTime::__construct():在位置 6 (0) 解析时间字符串 (1996-30-30) 失败:意外字符'

public function explodingDates($date){      
    list($day,$month,$year) = explode('/', $date);
    $newDate = $year.'-'.$month.'-'.$day;
    return (new \Datetime($newDate));
}

我在这里烧了我的大脑,不知道还能做些什么来进行验证。它还必须准备好接收任何类型的输入(如“askhdakjdh”、“123213”、“1.25/269”)并返回无效日期。

提前致谢

【问题讨论】:

  • @Fred-ii- 简而言之:不应该。您是否建议分配给表达式?
  • return 中有一个 '\' 是不是拼写错误?
  • @Fred-ii- 为什么 public 会导致错误?

标签: php codeigniter validation date


【解决方案1】:

不要分解日期字符串。使用DateTime::createFromFormat()创建DateTime对象,使用format()方法将其转换成不同的格式:

function ConvertToMySQLDate($datestr) {
    $d = DateTime::createFromFormat('d/m/Y', $datestr);
    $valid = $d && $d->format('d/m/Y') == $datestr;
    if ($valid) {
        return $d->format('Y-m-d');
    }
    return FALSE;
}

上面的函数接受dddd-mm-yyyy格式的日期字符串,检查它是否有效,并返回MySQL格式的日期(yyyy-mm-dd)。如果提供的日期无效,则返回 false。

示例用法:

var_dump(ConvertToMySQLDate('30/30/1996')); // bool(false)
var_dump(ConvertToMySQLDate('13/12/1996')); // string(10) "1996-12-13"

Demo

【讨论】:

  • 未来的日期呢?我已经尝试过了,并且可以使用我提到的所有内容。但是日期:28/03/2014 给了我一个错误
  • @Limon:它给你带来了什么错误?它works fine for me.
  • @amal,请解释一下这条线的含义。我无法获得结构。 $d && $d->format('d/m/Y') == $datestr.这会被视为 If 循环吗?
  • @Pravin:意思是,将$valid设置为查询结果“$d是否为True且$d->format('d/m/Y')的值等于$datestr的值”。所以$valid 将包含一个布尔值,表明提供的日期是否符合提供的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多