最近有用户意见反馈说自己昨天还显示最近几天没有断签过,今天却有断签的记录,以为程序哪出错了,原来这个用户是在国外访问的,没有考虑时区的原因。php如何获取服务器所在的时区?获取默认时区e
最近有用户意见反馈说自己昨天还显示最近几天没有断签过,今天却有断签的记录,
以为程序哪出错了,原来这个用户是在国外访问的,没有考虑时区的原因。
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 格林威治时间标准时间是必要的.
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") . "
");
echo(strtotime("15 October 1980") . "
");
echo(strtotime("+5 hours") . "
");
echo(strtotime("+1 week") . "
");
echo(strtotime("+1 week 3 days 7 hours 5 seconds") . "
");
echo(strtotime("next Monday") . "
");
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+
-------------------------------------------------------------------------------------