PHP万年历——突破mktime函数的时间限制
作者:黑马
做PHP万年历的最大困难有两个方面:一是mktime()函数的局限,二是Windows平台下Windows对合法时间的规定。
PHP函数mktime()用以获取UNIX时间戳记,即从UNIX时代创建以来到指定时间的总秒数,其意义是为date()等函数处理时间信息提供一个可解析的时间数据。UNIX时代从1970年1月1日开始,因此理论上mktime()能够返回的有效数据只适用于1970年以后的年份。
比起UNIX时间系统,Windows则显得小气了,它的合法时间系统更为狭小。如若PHP运行于Windows平台,mktime()函数还得看Windows的脸色。在UNIX和Linux操作环境下,date()通过mktime()读取1970年以前某个日期的时间戳记总是能够返回一个值(虽然不正确),而获取2038年以后的时间戳记,Windows平台下date()也会报错。
上述问题不解决,PHP万年历就名不副实。解决的思路之一是:绕开date()和mktime()函数,即,不使用它们参与处理日历的核心内容。
这需要对阳历进行必要的研究,深入掌握其内在规律。
阳历经历了三个时代:儒略历、奥古斯都历和现在仍然通行的格里历(又称格列高利历)。格里历由罗马教皇格列高利十三世于1582年10月15日(原奥古斯都历的10月5日,这一天不存在)倡导使用,直至今日。我们现在做万年历就是基于格里历的日历,即,做万年历要考虑的因素是格里历的规律。往下我们讨论的“阳历”指的就是格里历。
阳历有如下几个规则:
一. 一年的总天数:平年365天,闰年366天;
二. 闰年:非世纪年的年份(即不被100整除的年份)被4整除的为闰年,世纪年的年份(即被100整除的年份)被400整除的年份为闰年。闰年的二月份有29天;
三. 月份天数:
1. 大月(31天):一月、三月、五月、七月、八月、十月、十二月;
2. 小月(30天):四月、六月、九月、十一月;
3. 二月为28天,闰年为29天。
这些规律足以让我们抛开PHP的时间日期函数,取而代之的是使用我们根据格里历规律编写的自定义函数。
【 文章来源:作者原创 转载请注明作者和出处等信息 】
网 |

