[PHP]日期和时间

在PHP语言中默认设置的是标准的格林威治时间(即采用的零时区)

更改PHP语言中的时区设置有两种方法:

(1)修改php.ini文件中的设置,找到[date]下的";date.timezone="选项,将其修改为"date.timezone=Asia/Hong_Kong",然后重启Apache服务器。

(2)在应用程序中,在使用时间日期函数之前添加如下函数:date_default_timezone_set(timezone);

参数timezone为PHP可识别的时区名称,如果时区名称PHP无法识别,则系统采用UTC时区。

设置完成后,date()函数可以正常使用,不会再出现时差问题。

如果将程序上传到空间中,那么对系统时区设置时,不能修改php.in文件,只能使用date_default_timezone_set()函数时区进行设置。

 

PHP日期和时间函数

1.获得本地化时间戳

PHP应用mktime()函数将一个时间转换成UNIX时间戳值。

mktime()函数根据给出的参数返回UNIX时间戳。时间戳是一个长整数。包含了从UNIX到给定时间的秒数。

int mktime(int hour,int minute,int second,int month,int day,int year,int [is_dst])

参数:

hour 小时数

minute 分钟数

second 秒数(一分钟之内)

mont 月份数

day 天数

year 年分数(可以是两位或4位数字,0~69对应于2000~2069,70~100对应于1970~2000)

is_dst 参数is_dst在夏令时可以被设置为1,如果不是则设置为0,如果不确定是否为夏令时则设置为-1(默认值)

 

<?php
date_default_timezone_set("Asia/Hong_Kong");
echo "mktime函数返回的时间戳:".mktime()."<p>";
echo "当前的日期为:".date("Y-m-d",mktime())."<p>";
echo "当前的时间为:".date("H:i:s",mktime());
?>

 

 

 

获取当前时间戳

PHP通过time()函数获取当前的UNIX时间戳,返回值为从UNIX纪元当前时间的秒数

语法格式:

int time(void)

 

$nextweek=time()+(7*24*60*60);
echo 'Now:'.date("Y-m-d")."<p>";
echo 'Next Week'.date('Y-m-d',$nextweek);


获取当前日期和时间

 

在PHP中通过date()函数获取当前的日期和时间,

date(string format,int timestamp)

date()函数将返回参数timestamp按照指定格式而产生的字符串,其中的参数timestamp是可选的,如果省略,则使用当前时间,format参数可以是开发人员按其指定的格式输出日期和时间。

关于时间日期的预定义常量

函数

DATE_ATOM 原子钟格式

DATE_COOKIE HTTP Cookies格式

DATE_ISO8601 ISO-8601格式

DATE_RFC822 RFC822格式

DATE_RFC850 RFC850格式

DATE_RSS RSS格式

DATE_W3C World Wide Web Consortium格式

获取日期信息

 日期是数据处理中经常使用的信息之一。

array getdate(int timestamp)

getdate()函数返回数组形式的日期和时间信息。

getdate()函数返回的关联数组元素说明

函数

seconds    秒,返回值为0~59

minutes    分钟,返回值为0~59

hours    小时,返回值为0~23

mday    月份中第几天,返回值为1~31

wday    星期中第几天,返回值为0(表示星期日)~6(表示星期六)

mon 月份数字,返回值为1~12

year    4位数字表示的完整文本表示,返回值为Sunday~Staurday

weekday 星期几的完整文本表示,返回值为Sunday~Saturday

month   月份的完整文本表示,返回值为January~December

0     返回从UNIX纪元开始的秒数

检验日期的有效性

bool checkdate(int month,int day,int year)

 

echo "检查日期时间有效";
$year = 2008;
$month = 2;
$day1=29;
$day2=30;
var_dump(checkdate($month,$day1,$year));
echo "<br>";
var_dump(checkdate($month,$day2,$year));


输出格式化的日期和时间

 

date()函数的format选项

 

<?php
echo "输出单个变量:".date("Y")."-".date("m")."-".date("d");
echo "<p>";
echo "输出组合变量:".date("Y-m-d");
echo "<p>"
echo "输出更详细的日期和时间:".date("Y-m-d H:i:s");
echo "<p>";
?>

 

显示本地化的日期和时间

1.setlocal()函数

setlocal()函数可以改变PHP默认的本地化环境。

string setlocal(string category,string local);

参数local如果为空,就会使用系统环境变量的local或lang的值,否则就会应用local参数所指定的本地化环境。

 

strftime()函数

strftime()函数根据本地化环境设置来格式化输出日期和时间。

语法格式:string strftime(string format,int timestamp)

对于strftime()函数,可能不是所有的转换标记都被C库文件支持,这种情况下PHP的strftime()不支持。

 

<?php
setlocal(LC_ALL,"en_US");
echo "美国格式:".strftime("today is %A");
echo "<p>";
setlocal(LC_ALL,"chs");
echo "中文简体格式:".strftime("今天是%A");
echo "<p>";
setlocal(LC_ALL,"cht");
echo "<p>";
echo "繁体中文格式:".stftime("今天是%A");
?>

将日期和时间解析为UNIX时间戳

 

PHP中应用strtotime()函数可以将任何英文文本的日期和时间解析为UNIX时间戳,其值相对于now参数给出时间。

int strtotime(string time[,int now]);

该函数有两个参数,如果参数time的格式是绝对时间,则now参数不起作用,如果参数time的格式是相对时间,那么其对应的时间就是参数now来提供的,如果没有提供参数now,对应的时间就为当前时间的,如果解析失败返回false,在PHP5.1.0之前的本函数返回失败时为-1.

 

echo strtotime("now")."\n";
echo "输出时间:".date("Y-m-d H:i:s",strtotime("now"))."<br>";
echo strtotime("21 May 2009")."\n";
echo "输出时间:".date("Y-m-d H:i:s",strtotime("21 May 2009"))."<br>";
echo strtotime("+3 day")."\n";
echo "输出时间:".date("Y-m-d",strtotime("+3 day"))."<br>";
echo strtotime("+1 week")."<br>";
echo strtotime("+1 week 2 days 3 hours 4 seconds")."<br>";
echo strtotime("next Thursday")."<br>";


日期和时间的应用

 

比较两个时间的大小

首先将时间解析为时间戳的格式,然后再进行比较。使用strtotime()函数

 

$time1 =date("Y-m-d H:i:s");
$time2 ="2008-2-3 16:30:00";
echo "变量\$time1 的时间为:".$time1."<br>";
echo "变量\$time2 的时间为:".$time2."<br>";

if(strtotime($time1) - strtotime($time2) < 0){
    echo "\$time1 早于\$time2";
}else{
    echo "\$time2 早于\$time1";
}

计算页面脚本的运行时间

 

这里使用到了microtime()函数,该函数返回当前UNIX时间戳和微秒数,返回格式为msec sec的字符串。其中sec是当前的UNIX时间戳,msec为微秒数。

string microtime(void)

 

/*声明run_time函数*/
function run_time(){
    list($msec,$sec) = explode(" ",microtime());//使用explode函数返回两个变量
    return ((float)$msec + (float)$sec);
}

$start_time = run_time();//第一次运行run_time()函数
/*运行PHP代码段*/
$time1= strtotime(date("Y-m-d H:i:s"));
$time2= strtotime("2010-2-10 17:10:00");
$time3= strtotime("2010-1-1");

$sub1 = cell(($time2 -$time1)/3600);
$sub2 = cell(($time3 -$time1)/86400);

echo "离放假还有<font color=red>$sub2</font>天";
$end_time=run_time();
// 输出运行时间
<font color=blue><?php echo ($end_time-$start_time);?></font>


explode()函数:array explode(string separator,string string);该函数的作用是将字符串(strng)依照指定的字符串或字符(separator)切开,如果separator为空(" "),那么函数将返回false,如果separator所包含的值在string中找不到,那么函数将返回string单个元素的数组。

 

list()函数,函数格式为void list(mixed...)。该函数的作用是将数组中的值赋给一些变量(mixed)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值