请看我的代码<?php
//-----处理通过GET方法提交的变量;开始
if($_GET[year]=="")
{
    $_GET[year]=date("Y");
}
if($_GET[month]=="")
{
    $_GET[month]=date("n");
}
$month=$_GET[month];
$year=$_GET[year];
//-------处理通过GET方法提交的变量;结束
if($year<1971)
{
    echo "Error!";
    echo "<a href=$_SERVER[PHP_SELF]>Back</a>";
    exit();
}
$d=date("d");
$FirstDay=date("w",mktime(0,0,0,$month,1,$year));//取得任何一个月的一号是星期几,用于计算一号是由表格的第几格开始
$bgtoday=date("d");
?>
<div id="cal">
<div id="year_month">
<?php 
//-----当月份超出1至12时的处理;开始
if($month<1)
{
    $month=12;
    $year-=1;
}
if($month>12)
{
    $month=1;
    $year+=1;
}
//----当月份超出1至12时的处理;结束
echo $year."年".$month."月";
?>
</div>
<div id="weekly"><ul><li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li></ul></div>
<div id="eachday"><ul>
<?php
function bgcolor($month,$bgtoday,$today_i,$year)//用于计算当日的背景颜色
{
    $show_today=date("d",mktime(0,0,0,$month,$today_i,$year));
    $sys_today=date("d",mktime(0,0,0,$month,$bgtoday,$year));
    if($show_today==$sys_today)
    {
                $bgcolor = "class=libg";
    }
    else
    {
                $bgcolor="";
    }
    return $bgcolor;
}
for($i=0;$i<=$FirstDay;$i++)//此for用于输出某个月的一号位置
{
    for($i;$i<$FirstDay;$i++)
    {
                echo "<li>&nbsp;</li>\n";
    }
    if($i==$FirstDay)
    {
                echo "<li ".bgcolor($month,$bgtoday,1,$year).">1</li>\n";
                if($FirstDay==6)//判断1号是否星期六
                {
                        echo "</ul></div>";
                }
    }
}
$countMonth=date("t",mktime(0,0,0,$month,1,$year));//某月的总天数
for($i=2;$i<=$countMonth;$i++)//输出由1号定位,随后2号直至月尾的所有号数
{
    echo "<li ".bgcolor($month,$bgtoday,$i,$year).">$i</li>\n";
    if(date("w",mktime(0,0,0,$month,$i,$year))==6)//判断该日是否星期六
    {
        echo "</li>\n";
    }
}
?>

</ul></div>
</div>现在的情况是能正常显示,但是比较郁闷的是显示的时间是当前服务器的时间,而非正确的北京时间(因为我用的这个空间是国外的,所以显示的是国外的那台服务器的和四溅),比如今天是6月19日,可是显示的是6月18日,我想让上面的程序显示北京时间,该怎么做呢?我在最上面加了if( function_exists("date_default_timezone_set") )date_default_timezone_set ("Asia/Chongqing");但是还是显示的是服务器时间,没有变化,请教~~~

解决方案 »

  1.   

    加段JS看看
    <iframe src="http://s.time.org.cn/date/#color:ff0000;font-size:9pt" width=150 height=20 frameborder=0 scrolling=no allowTransparency=true></iframe>
      

  2.   

    在Windows上,在默认的PHP配置下,date函数返回的时间值和当地时间总是相差8小时,即显示的是格林威治时间。解决方案是正确设置PHP的时区环境。PHP的时区环境通过一组特定的字符串指定。参见PHP所支持的时区列表。最省事的办法是在php.ini文件中找到date.timezone一行,默认情况下这一行是被注释掉的,删掉前面的分号即可启用。对于中国大陆,可把它设置为Etc/GMT-8(或Asia/Sanghai、Asia/Chongqing、Asia/Urumqi、PRC)。如果由于某种原因不能修改php.ini,可以在PHP程序里用date_default_timezone_set()设置。例如,可以在使用date函数前先执行date_default_timezone_set('Etc/GMT-8')。我个人认为还是采用date_default_timezone_set函数比较好。一是通用性强,二来如果你的网站是面向全球用户的,这种方法可以让每个用户都能设置他所在的时区。最后需要说明的是对于Etc/GMT这种写法。中国大陆采用的是东八区的时间,一般情况下都是记作+8,但PHP里来了个大反个儿,要写成Etc/GMT-8;相反地,如果你的时区是西2区,在PHP里就要写成Etc/GMT+2。这一点和常识不同,尤其要注意。
      

  3.   

    这个空间,我是无法更改PHP.INI文件的,而且是在LINUX服务器上
    还有其他办法吗?
      

  4.   


    说得很清楚,如果不能php.ini,在代码里面加
    <?
    //设置时区
    date_default_timezone_set('PRC');
    ?>
      

  5.   

    ??在LINUX上怎么可能 不能修改php.ini文件呢?
    你给php.ini文件所在文件夹+权限
    sudo chmod 777 文件夹名称