PHP中操作时区小结

最近有用户意见反馈说自己昨天还显示最近几天没有断签过,今天却有断签的记录,
以为程序哪出错了,原来这个用户是在国外访问的,没有考虑时区的原因。


php如何获取服务器所在的时区?

//获取默认时区
echo date_default_timezone_get();
一、关于PHP的时区设置方法:

1、修改php.ini
在php.ini中找到data.timezone =去掉它前面的;号,
然后设置data.timezone ="Asia/Shanghai";即可。

2、在程序PHP 5以上版本的程序代码中使用函数

ini_set('date.timezone','Asia/Shanghai');
或者
  date_default_timezone_set('Asia/Shanghai');

一些常用的时区标识符说明:
Asia/Shanghai – 上海GMT+8:00
Asia/Chongqing – 重庆
Asia/Urumqi – 乌鲁木齐
Asia/Hong_Kong – 香港
Asia/Macao – 澳门
Asia/Taipei – 台北
Asia/Singapore – 新加坡

函数设置时区方法:
1.函数date_default_timezone_set()设置时区:
function_exists(date_default_timezone_set);//在这他总是返回1,这函数是判断这里面的字符是不是一个定义了的函数名
date_default_timezone_set("Etc/GMT");//这是格林威治标准时间,得到的时间和默认时区是一样的
date_default_timezone_set("Etc/GMT+8");//这里比林威治标准时间慢8小时
date_default_timezone_set("Etc/GMT-8");//这里比林威治标准时间快8小时
date_default_timezone_set('PRC'); //设置中国时区

2.函数ini_set()设置时区:
在文件开头加入
ini_set('date.timezone','Asia/Shanghai'); // 'Asia/Shanghai' 为上海时区

3.修改php.ini设置
打开php找到date.timezone = "PRC" 如有去掉前面的分号,没有的话手动添加!

可能问题:
$atime = date("Y-m-d H:i:s");
echo $atime;//获取时间于本地时间相差很大
注意:
如果输出时间与本地时间有差别的话。
那可能就是假如你不在程序或配置文件中设置你的服务器当地时区
PHP所取的时间是格林威治标准时间,格林威治标准时间和北京时间大概差8个小时左右。
解决方法:
1.在页头使用date_default_timezone_set()
如设置我的默认时区为北京时间
代码如下:
date_default_timezone_set('PRC');
echo date('Y-m-d H:i:s');
时间和服务器当前时间一样了!

二、php转换GMT标准时间函数

GMT格林威治时间和本地的时间是有时差的, 我们知道php指定时区后用date()函数获取的是本地时间,
如果想获取标准的GMT 格林威治时间就要用gmdate()函数了.

我们也可以把本地的时间转换为格林威治时间GMT格式.
php获取GMT格式时间的方法:
echo gmdate("l d F Y H:i:s");//输出: Wednesday09 April 2014 03:53:36
如果后面要跟一个GMT标识:
echo gmdate("l d F Y H:i:s")." GMT"; //输出: Wednesday 09 April 2014 03:53:36 GMT
为什么要用GMT格式的时间呢?

比如我们要给网页设置缓存, 浏览这个网页的人有可能是上海的也有可能是美国的,

上海和美国是有时差的, 所以设置为GMT 格林威治时间标准时间是必要的.

<meta http-equiv="Cache-Control" content="max-age=72000" />
<meta http-equiv="Expires" content="Thursday 10 April 201403:59:29 GMT" />
php获取后一天时间的方法:
 echo gmdate ("l d F Y H:i:s",strtotime("+1 day"))." GMT";
这里的strtotime("+1 day")的意思就是明天这个时间,
如果要获取一周后可以这样 strtotime("+1 week"),
依此类推, 一月后用(+1month), 一年后用(+1 year)

三、CST转换为GMT时间

不清楚CST和GMT的可以点看这篇。

1.直接设置为
date_default_timezone_set('Etc/GMT');
$atime = date("Y-m-d H:i:s");
echo $atime;//获取设置时区的时间
2.自己封装了一个转换方法
//将其他时区的时间转化为GMT时区时间
function getTime($timezone) {

	if(empty($timezone)) {
		return time();
	}
	$time = strtotime(gmdate("Y-m-d H:i:s"));//GMT时间戳
	$arr = explode(':',substr($timezone,4));
	$h = intval($arr[0]);
	$i = intval($arr[1]);
	if(!strrpos($timezone,'+')) {
		//减
		$time1 = $time;
		if($h>0){
			$time1 = strtotime('-'.$h.' hour',$time1);
		}
		if($i>0){
			$time1 = strtotime('-'.$i.' minutes',$time1);
		}
	}else{
		//加
		$time1 = $time;
		if($h>0){
			$time1 = strtotime('+'.$h.' hour',$time1);
		}
		if($i>0){
			$time1 = strtotime('+'.$i.' minutes',$time1);
		}
	}
	//转化为中国时区时间
	//$time1 = strtotime('+8 hour',$time1);
	return $time1;
}
$timezone = 'GMT-12:00';//timezone时区格式
echo getTime($timezone);die;
附函数date_default_timezone_set() 用法如下:
------------------------------------------------------------------------------------
设置默认时区:
date_default_timezone_set("Asia/Shanghai");
echo date_default_timezone_get();
定义和用法

date_default_timezone_set() 函数设置脚本中所有日期/时间函数使用的默认时区。


语法

date_default_timezone_set(timezone);


参数     描述
timezone
必需。规定要使用的时区,比如 "UTC" 或 "Europe/Paris"。

技术细节
返回值:     如果 timezone 不合法则返回 FALSE,否则返回 TRUE。
PHP 版本:     5.1+
-------------------------------------------------------------------------------------

附函数strtotime() 用法如下:
-------------------------------------------------------------------------------------
将英文文本日期时间解析为 Unix 时间戳:
echo(strtotime("now") . "<br>");
echo(strtotime("15 October 1980") . "<br>");
echo(strtotime("+5 hours") . "<br>");
echo(strtotime("+1 week") . "<br>");
echo(strtotime("+1 week 3 days 7 hours 5 seconds") . "<br>");
echo(strtotime("next Monday") . "<br>");
echo(strtotime("last Sunday"));
定义和用法
strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳
(自 January 1 1970 00:00:00 GMT 起的秒数)。

注意:如果年份表示使用两位数格式,则值 0-69 会映射为 2000-2069,
值 70-100 会映射为 1970-2000。

注意:请注意 m/d/y 或 d-m-y 格式的日期,如果分隔符是斜线(/),
则使用美洲的 m/d/y 格式。如果分隔符是横杠(-)或者点(.),
则使用欧洲的 d-m-y 格式。为了避免潜在的错误,
您应该尽可能使用 YYYY-MM-DD 格式或者使用 date_create_from_format() 函数。

语法
strtotime(time,now);

参数     描述
time     必需。规定日期/时间字符串。
now     可选。规定用来计算返回值的时间戳。如果省略该参数,则使用当前时间。
返回值:     若成功则返回时间戳,失败则返回 FALSE。
PHP 版本:     4+
-------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/json_ligege/article/details/78563597
今日推荐