php使用strtotime和date函数判断日期是否有效代码分享

咋一想,判断日期是否有效应该是蛮简单的一个功能,但是细想起来还是有点麻烦的,因为既要检验格式,又要检验有效性。例如2013-02-29,虽然格式正确,但是日期无效;而2012-02-29格式正确,也有效。

一种方法可以使用正则,但是正则其实理解起来蛮麻烦的,而且使用正则在检验有效性方面也不太好。这里提供一个方法,主要是使用strtotime和date函数进行检验。直接上函数:

代码如下:

/**
 * 校验日期格式是否正确
 *
 * @param string $date 日期
 * @param string $formats 需要检验的格式数组
 * @return boolean
 */
function checkDateIsValid($date, $formats = array("Y-m-d", "Y/m/d")) {
    $unixTime = strtotime($date);
    if (!$unixTime) { //strtotime转换不对,日期格式显然不对。
        return false;
    }

//校验日期的有效性,只要满足其中一个格式就OK
    foreach ($formats as $format) {
        if (date($format, $unixTime) == $date) {
            return true;
        }
    }

return false;
}

代码注释里说明的比较详细了,就不再叙说了。有一点要注意下:如果需要的日期格式比较特别,即便是正确的格式,strtotime函数也无法解析的,则不能使用这个函数,不过这种情况应当非常少见了。

一些例子:

代码如下:

var_dump(checkDateIsValid("2013-09-10")); //输出true
var_dump(checkDateIsValid("2013-09-ha")); //输出false
var_dump(checkDateIsValid("2012-02-29")); //输出true
var_dump(checkDateIsValid("2013-02-29")); //输出false

(0)

相关推荐

  • php中时间函数date及常用的时间计算

    曾在项目中需要使用到今天,昨天,本周,本月,本季度,今年,上周上月,上季度等等时间戳,趁最近时间比较充足,因此计划对php的相关时间知识点进行总结学习 1,阅读php手册date函数 常用时间函数: checkdate()验证一个时间是否正确 date_default_timezone_get()取得当前脚本所使用的时区 date_default_timezone_set()设定脚本所用时区  ini_set()也可以满足,或者修改配置文件 date_sunrise()  date_sunset

  • PHP date函数常用时间处理方法

    复制代码 代码如下: echo "今天:".date("Y-m-d")."<br>";     echo "昨天:".date("Y-m-d",strtotime("-1 day")), "<br>";     echo "明天:".date("Y-m-d",strtotime("+1 day&

  • PHP date()函数警告: It is not safe to rely on the system解决方法

    近来总是有系统邮件提示,开始没在意,后来不断提示就看了一下.提示以下信息 复制代码 代码如下: PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of t

  • 关于php程序报date()警告的处理(date_default_timezone_set)

    在写php程序中有时会出现这样的警告: PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are stil

  • PHP下获取上个月、下个月、本月的日期(strtotime,date)

    今天写程序的时候,突然发现了很早以前写的获取月份天数的函数,经典的switch版,但是获得上月天数的时候,我只是把月份-1了,估计当时太困了吧,再看到有种毛骨悚然的感觉,本来是想再处理一下的,但是一想肯定还有什么超方便的方法,于是找到了下面这个版本,做了一点小修改. 获取本月日期: 复制代码 代码如下: function getMonth($date){     $firstday = date("Y-m-01",strtotime($date));     $lastday = da

  • PHP date函数参数详解

    time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,很奇怪吧 不过这样方便计算, 要找出前一天的时间就是 time()-60*60*24; 要找出前一年的时间就是 time()*60*60*24*365 那么如何把这个数字换成日期格式呢,就要用到date函数了 $t=time();  echo date("Y-m-d H:i:s",$t); 第一个参数的格式分别表示: a - "am" 或是 "pm"  A

  • JS版的date函数(和PHP的date函数一样)

    复制代码 代码如下: // 和PHP一样的时间戳格式化函数// @param  {string} format    格式// @param  {int}    timestamp 要格式化的时间 默认为当前时间// @return {string}           格式化的时间字符串function date ( format, timestamp ) {    var a, jsdate=((timestamp) ? new Date(timestamp*1000) : new Date

  • php中用date函数获取当前时间有误的解决办法

    初学PHP做网站,想在页面上获得当前时间,学过编程的人都知道用时间函数date(),先用这个函数格式化一个本地时间/日期,先写个测试代码吧,结果输出时间比实际时间少了8小时,这是什么原因呢: 复制代码 代码如下: <?php     echo date('Y-m-d H:i:s'); ?〉 输出当前时间:2008-10-12 02:32:17 怪了,实际时间是:2008-10-12 10:32:17 难道是PHP的date()时间不正确 少8个小时? 再看看PHP手册的"例子 1. dat

  • php Smarty date_format [格式化时间日期]

    Example 5-8. date_format[日期格式] index.php: 复制代码 代码如下: $smarty = new Smarty; $smarty->assign('yesterday', strtotime('-1 day')); $smarty->display('index.tpl'); index.tpl: {$smarty.now|date_format} {$smarty.now|date_format:"%A, %B %e, %Y"} {$s

  • php使用strtotime和date函数判断日期是否有效代码分享

    咋一想,判断日期是否有效应该是蛮简单的一个功能,但是细想起来还是有点麻烦的,因为既要检验格式,又要检验有效性.例如2013-02-29,虽然格式正确,但是日期无效:而2012-02-29格式正确,也有效. 一种方法可以使用正则,但是正则其实理解起来蛮麻烦的,而且使用正则在检验有效性方面也不太好.这里提供一个方法,主要是使用strtotime和date函数进行检验.直接上函数: 复制代码 代码如下: /** * 校验日期格式是否正确 *  * @param string $date 日期 * @p

  • js模仿php中strtotime()与date()函数实现方法

    本文实例讲述了js模仿php中strtotime()与date()函数实现方法.分享给大家供大家参考.具体如下: 在js中没有像php中strtotime()与date()函数,可直接转换时间戳,下面我们来自定一个函数来实现js中具体有时间戳转换的功能. function datetime_to_unix(datetime){ var tmp_datetime = datetime.replace(/:/g,'-'); tmp_datetime = tmp_datetime.replace(/

  • java date类与string类实例代码分享

    Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclonggetTime() 返回自新世纪以来的毫秒数,可以用于时间计算. [例3.10]测试执行循环花费的时间(数量级为毫秒),具体时间情况如图3.9所示.源程序代码如下: //程序文件名为UseDate.java import java.util.Date; public class UseDate { pu

  • C++中函数指针详解及代码分享

    函数指针 函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,如同数组的名字就是数组的起始地址. 1.函数指针的定义方式:data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn); c语言函数指针的定义形式:返回类型 (*函数指针名称)(参数类型,参数类型,参数类型,-); c++函数指针的定义形式:返回类型 (类名

  • jQuery带时间的日期控件代码分享

    本文实例讲述了JS+CSS3实现的类似于苹果iwatch计时器特效.分享给大家供大家参考.具体如下: 带时间的jQuery日期控件代码是一款基于jQueryUI实现的,可自定义日期插件语言,这个日期控件的亮点就在于选择的时间可精确到分钟. 运行效果图:                    -------------------查看效果 下载源码------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的jQuery带时间的日期控件代码如下 <h

  • jQuery UI设置固定日期选择特效代码分享

    本文实例讲述了jQuery UI设置固定日期选择特效.分享给大家供大家参考.具体如下: jQuery实现UI设置固定日期选择特效是一款jQuery ui日期插件,可选固定日期及自定义日期代码. 运行效果图:                             -------------------查看效果 下载源码------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的jQuery UI设置固定日期选择代码如下 <head> <m

  • 封装好的js判断操作系统与浏览器代码分享

    摘要: 对于前端开发我们最重要的工作就是兼容性,系统的兼容性,浏览器的兼容性等等.今天分享一个我在项目中封装的判断操作系统与浏览器的方法. 操作系统: var os = (function() { var UserAgent = navigator.userAgent.toLowerCase(); return { isIpad : /ipad/.test(UserAgent), isIphone : /iphone os/.test(UserAgent), isAndroid : /andro

  • js实现点击文本框显示日期选择器特效代码分享

    为大家分享的JavaScript图片轮播代码如下 <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>js点击文本框显示日期选择器</title> <link type="text/css" rel="stylesheet" href="calen

  • c#通过进程调用cmd判断登录用户权限代码分享

    复制代码 代码如下: /// <summary>/// 应用程序的主入口点./// </summary>[STAThread]static void Main(){ if (RunCmd("net localgroup administrators").IndexOf(System.Environment.UserName) >= 0)    { //顺利执行.    }    else    {        //报错提示系统不是管理员用户登录,容易导致

  • JavaScript判断日期时间差的实例代码

    js判断日期时间的代码如下所示: alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour")); function GetDateDiff(startTime, endTime, diffType) { //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 startTime = startTime.replace(/\-/g, "/&q

随机推荐