找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 220|回复: 0
打印 上一主题 下一主题

php calender(日历)二个版本代码示例(解决2038问题)

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 06:01:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            

注意32位机有2038问题,所以32位服务器的年限范围1970年~2038年
我们还可以使用DateTime来规避这个问题(这样与32位64位无关了)
[U]复制代码[/U] 代码如下:
= 2038)
  {
   $year = date ( 'Y' );
  }
} else
{
  if ($year  12)
{
  $month = date ( 'm' );
}
//上一年
$pretYear = $year - 1;
//上一月
$mpYear = $year;
$preMonth = $month - 1;
if ($preMonth  12)
{
  $nextMonth = 1;
  $mnYear = $nextYear;
}
//日历头
$html =
/**
*
* 检测是否是32位机
* @author fc_lamp
* @blog: fc-lamp.blog.163.com
*/
function is32()
{
$is32 = False;
if (strtotime ( '2039-10-10' ) === False)
{
  $is32 = True;
}
return $is32;
}
使用DateTime 类解决2038问题,这样不分32位与64位,代码如下:
[U]复制代码[/U] 代码如下:
format( 'Y' );
}
if ($month  12)
{
  $month = $nowDate->format('m' );
}
//上一年
$pretYear = $year - 1;
//上一月
$mpYear = $year;
$preMonth = $month - 1;
if ($preMonth  12)
{
  $nextMonth = 1;
  $mnYear = $nextYear;
}
//日历头
$html = format('Y-m-j' );
//当月最后一天
$creatDate = new DateTime("$year-$nextMonth-0");
$lastday = $creatDate->format('j');
$creatDate = NULL;
//循环输出天数
$day = 1;
$line = '';
while ( $day format('N');
  $creatDate = NULL;
  if ($day == 1)
  {
   $line = '[tr]';
   $line .= str_repeat ( '[td] [/td]', $nowWeek - 1 );
  }
  if ($cday == $currentDay)
  {
   $style = 'style="color:red;"';
  } else
  {
   $style = '';
  }
  $line .= "[td]$day[/td]";
  //一周结束
  if ($nowWeek == 7)
  {
   $line .= '[/tr]';
   $html .= $line;
   $line = '[tr]';
  }
  //全月结束
  if ($day == $lastday)
  {
   if ($nowWeek != 7)
   {
    $line .= str_repeat ( '[td] [/td]', 7 - $nowWeek );
   }
   $line .= '[/tr]';
   $html .= $line;
   break;
  }
  $day ++;
}
$html .=
            
            
您可能感兴趣的文章:
  • PHP中大于2038年时间戳的问题处理方案
  • php实现兼容2038年后Unix时间戳转换函数
  • 关于PHP转换超过2038年日期出错的问题解决
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端