首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查日期问题

问检查日期问题
EN

Stack Overflow用户
提问于 2014-02-14 17:54:09
回答 1查看 169关注 0票数 1

我正努力做一些日期验证。我已经创建了3种不同的功能,它们都能工作,但不是在特殊情况下。

我做的最后一件事是:

代码语言:javascript
复制
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 dd 00:00:00。

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

DateTime::__construct():未能解析位于位置6(0)的时间字符串(1996-30-30):意外字符‘

代码语言:javascript
复制
public function explodingDates($date){      
    list($day,$month,$year) = explode('/', $date);
    $newDate = $year.'-'.$month.'-'.$day;
    return (new \Datetime($newDate));
}

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

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-14 18:03:05

不要爆日期线。使用DateTime::createFromFormat()创建DateTime对象,并使用format()方法将其转换为不同的格式:

代码语言:javascript
复制
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。

示例用法:

代码语言:javascript
复制
var_dump(ConvertToMySQLDate('30/30/1996')); // bool(false)
var_dump(ConvertToMySQLDate('13/12/1996')); // string(10) "1996-12-13"

Demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21786241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档