YanHai.net  
网站地图 RSS订阅
高级搜索 收藏本站
热门关键字: 菜单
  当前位置:主页>PHP>PHP>文章内容
  热点文章
·php 数据库操作类
·ASP.NET和PHP性能对比整理和翻译
·PageRank (PR) 值查询,PHP源代
  相关文章
·php 数据库操作类
·PageRank (PR) 值查询,PHP源代
·ASP.NET和PHP性能对比整理和翻译
php 日期类
来源: 作者: 发布时间:2007-09-26  
php 日期类
<?
/**
这是公历和农历类的定义,由于php的日期计算限制,所以只能计算1970-1938之间的时间
*/
/**
* 日期类
* 本对象套用JavaScript的日期对象的方法
* 设置$mode属性,可兼容JavaScript日期对象
*/
class Date {
 var $time = 0;
 var $mode = 0; // 本属性为与JavaScript兼容而设,$mode=1为JavaScript方式
 var $datemode = "Y-m-d H:i:s"; // 日期格式 "Y-m-d H:i:s",可自行设定
 function Date($t=0) {
  if($t == 0)
  $this->time = time();
 }
 /**
 * 返回从GMT时间1970年1月1日0时开始的毫秒数
 */
 function getTime() {
  $temp = gettimeofday();
  return $temp[sec]*1000+round($temp[usec]/1000);
 }
 /**
 * 返回年份
 */
 function getYear() {
  $temp = getdate($this->time);
  return $temp[year];
 }
 /**
 * 返回月份
 */
 function getMonth() {
  $temp = getdate($this->time);
  return $temp[mon]-$this->mode;
 }
 /**
 * 返回日期
 */
 function getDate() {
  $temp = getdate($this->time);
  return $temp[mday];
 }
 /**
 * 返回星期
 */
 function getDay() {
  $temp = getdate($this->time);
  return $temp[wday]-$this->mode;
 }
 /**
 * 返回小时
 */
 function getHours() {
  $temp = getdate($this->time);
  return $temp[hours];
 }
 /**
 * 返回分
 */
 function getMinutes() {
  $temp = getdate($this->time);
  return $temp[minutes];
 }
 /**
 * 返回秒
 */
 function getSeconds() {
  $temp = getdate($this->time);
  return $temp[seconds];
 }
 /**
 * 设定年份
 * php 4.0.6 year 1970 -- 2038
 */
 function setYear($val) {
  $temp = getdate($this->time);
  $temp[year] = $val;
  $this->set_time($temp);
 }
 /**
 * 设定月份
 */
 function setMonth($val) {
  $temp = getdate($this->time);
  $temp[mon] = $val+$this->mode;
  $this->set_time($temp);
 }
 /**
 * 设定日期
 */
 function setDate($val) {
  $temp = getdate($this->time);
  $temp[mday] = $val;
  $this->set_time($temp);
 }
 /**
 * 设定星期
 */
 function setDay($val) {
  $temp = getdate($this->time);
  $temp[wday] = $val+$this->mode;
  $this->set_time($temp);
 }
 /**
 * 设定小时
 */
 function setHours($val) {
  $temp = getdate($this->time);
  $temp[hours] = $val;
  $this->set_time($temp);
 }
 /**
 * 设定分
 */
 function setMinutes($val) {
  $temp = getdate($this->time);
  $temp[minutes] = $val;
  $this->set_time($temp);
 }
 /**
 * 设定秒
 */
 function setSeconds($val) {
  $temp = getdate($this->time);
  $temp[seconds] = $val;
  $this->set_time($temp);
 }
 /**
 * 返回系统格式的字符串
 */
 function toLocaleString() {
  return date($this->datemode,$this->time);
 }
 /**
 * 使用GTM时间创建一个日期值
 */
 function UTC($year,$mon,$mday,$hours=0,$minutes=0,$seconds=0) {
  $this->time = mktime($hours,$minutes,$seconds,$mon,$mday,$year);
  return $this->time;
 }
 /**
 * 等价于DateAdd(interval,number,date)
 * 返回已添加指定时间间隔的日期。
 * Inetrval为表示要添加的时间间隔字符串表达式,例如分或天
 * number为表示要添加的时间间隔的个数的数值表达式
 * Date表示日期
 *
 * Interval(时间间隔字符串表达式)可以是以下任意值:
 * yyyy year年
 * q Quarter季度
 * m Month月
 * y Day of year一年的数
 * d Day天
 * w Weekday一周的天数
 * ww Week of year周
 * h Hour小时
 * n Minute分
 * s Second秒
 * w、y和d的作用是完全一样的,即在目前的日期上加一天,q加3个月,ww加7天。
 */
 function Add($interval, $number, $date) {
  $date = Date::get_time($date);
  $date_time_array = getdate($date);
  $hours = $date_time_array["hours"];
  $minutes = $date_time_array["minutes"];
  $seconds = $date_time_array["seconds"];
  $month = $date_time_array["mon"];
  $day = $date_time_array["mday"];
  $year = $date_time_array["year"];
  switch ($interval) {
   case "yyyy": $year +=$number; break;
   case "q": $month +=($number*3); break;
   case "m": $month +=$number; break;
   case "y":
   case "d":
   case "w": $day+=$number; break;
   case "ww": $day+=($number*7); break;
   case "h": $hours+=$number; break;
   case "n": $minutes+=$number; break;
   case "s": $seconds+=$number; break;
  }
 $temptime = mktime($hours ,$minutes, $seconds,$month ,$day, $year);
  return $temptime;
 }
 /**
 * 等价于DateDiff(interval,date1,date2)
 * 返回两个日期之间的时间间隔
 * intervals(时间间隔字符串表达式)可以是以下任意值:
 * w 周
 * d 天
 * h 小时
 * n 分钟
 * s 秒
 */
 function Diff($interval, $date1,$date2) {
 // 得到两日期之间间隔的秒数
 $timedifference = Date::get_time($date2) - Date::get_time($date1);
  switch ($interval) {
   case "w": $retval = bcdiv($timedifference ,604800); break;
   case "d": $retval = bcdiv( $timedifference,86400); break;
   case "h": $retval = bcdiv ($timedifference,3600); break;
   case "n": $retval = bcdiv( $timedifference,60); break;
   case "s": $retval = $timedifference; break;
  }
 return $retval;
 }
 
 /**
 * 输出,根据需要直接修改本函数或在派生类中重写本函数
 */
 function display() {
  $nStr = array('日','一','二','三','四','五','六');
  echo sprintf("%4d年%2d月%2d日 星期%s<br>",$this->getYear(),$this->getMonth(),$this->getDate(),$nStr[$this->getDay()%7]);
 }
 /**
 * 工作函数
 */
 function set_time(&$ar) {
  $this->time = mktime($ar[hours],$ar[minutes],$ar[seconds],$ar[mon],$ar[mday],$ar[year]);
 }
 /**
 * 转换为UNIX时间戳
 */
 function get_time($d) {
  if(is_numeric($d))
   return $d;
  else {
   if(! is_string($d)) return 0;
   if(ereg(":",$d)) {
    $buf = split(" +",$d);
    $year = split("[-/]",$buf[0]);
    $hour = split(":",$buf[1]);
    if(eregi("pm",$buf[2]))
     $hour[0] += 12;
    return mktime($hour[0],$hour[1],$hour[2],$year[1],$year[2],$year[0]);
   }else {
    $year = split("[-/]",$d);
    return mktime(0,0,0,$year[1],$year[2],$year[0]);
   }
  }
 }
}
// 日期类定义结束
$d = new Date;
//*******************************************
// 测试例
/*
$d = new Date;
echo "<br>现在是:";
$d->display();

$d->setYear(2037);
echo "<br>现在是:";
echo $d->getYear()."年";
echo $d->getMonth()."月";
echo $d->getDate()."日";
echo " 星期".$d->getDay()." ";
echo $d->getHours()."时";
echo $d->getMinutes()."分";
echo $d->getSeconds()."秒<br>";

$d->UTC(1998,10,2,22,0,8);
echo $d->toLocaleString()."<br>";

$d = new Date;

$d->display();

$d->UTC(1998,10,2,22,0,8);

$d->display();

echo __LINE__."<BR>";

$d1 = "2002-01-11";
$d2 = date("Y-m-d",$d->add("d",35,$d1));

echo $d1."的". Date::diff("d",$d1,$d2)."天后是$d2<br>";
echo $d1."的10天前是".date("Y-m-d",Date::add("d",-10,$d1))."<br>";
$d3 = date("Y/m/d H:i:s");
echo "现在是".$d3."距离2002/2/12 12:59:59还有".Date::diff("s",$d3,"2002/2/12 12:59:59")."秒<br>";
//*/
?>

(阅读次数:
上一篇:php 数据库操作类   下一篇:安徽凤阳辞退大学生村官 没创业意向是原因之一
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 最新评论
友情链接 [所有链接] [申请链接]
 DANB GROUP  DB Shop  MINDPATH US  MINDPATH CN  奥佳晋特科技  梦网互联  卓壮速度轮滑俱乐部
 北京中文德利行  Perfect Home  ASIA WEEKLY  Garden of Delights  Web Rank Info  HEALTH TRAVEL ASIA
 Y.H.    AUG Group  
Search Engine Spider Simulator

Enter URL to Spider:

Valid XHTML 1.0 Transitional

Valid XHTML 1.0 Transitional