php 跨区域,PHP跨时区的功能实现

现在有一个跨时区的应用,不同时区登录的用户需要看到自己时区的时间,同时也要能够进行时区的切换。

我的思路是,系统中所有存储的时间都是GMT(UTC)时间,用户登录时,根据用户所在的时区进行对应的显示。

首先了解一下PHP中时区的设置方法。PHP中进行设置的方法比较灵活多样,可以在php.ini中设置date.timezone属性、可以通过代码,调用ini_set(‘date.timezone’, ‘’)设置,也可以使用函数 date_default_timezone_set(),或者在htaccess文件中设置。

服务器的默认时区,如果设置的和我们希望的时区不符,而且我们也没有权限修改全局的时区配置,就只有借助于代码了。

PHP还提供了一个方便的函数,gmdate(),可以让我们不用关心服务器的时区设置而始终获得GMT时间,我的思路就是基于这个函数。

我的项目中使用了Codeigniter这个框架,框架中的date这个helper提供了几个方便的函数,可以用来处理应用中的多时区情况。

其中 now() 始终返回的是gmt的当前时间;local_to_gmt() 可以将本地的时间转换为gmt时间;gmt_to_local() 可以将gmt时间转换为本地时间;

考虑一个典型的应用场景:

用户登陆后,要显示当前时间。这是我们可以使用now()获得标准的gmt时间,然后使用gmt_to_local()函数转化为用户所在时区的时间。

用户要发布一个时间。用户发布了一个“2010-07-10 18:30:00”的时间,我们不能直接存入数据库,必须先利用local_to_gmt() 转化标准的gmt时间存入数据库,这样才能保证整个系统中的时间保持一致。

这两个函数的细节,其实都是根据时区,然后进行相应的运算得来。计算的时候,也可以考虑夏令时,但是所在时区夏令时的开始和结束时间,则需要自己维护。

codeigniter中提供了一份较为完整的时区列表,timezone_menu() 可以显示一个时区的下拉列表,但是这个列表中的时间不能完全对应到PHP自带的时区显示上,这是PHP本身的问题,不过可以通过下面这个函数,来让输入的每个时区,都可以获得一个对应的时区文字显示。

if( ! function_exists("tz_offset_to_name") )

{

/* Takes a GMT offset (in hours) and returns a timezone name */

function tz_offset_to_name($offset)

{

$offset *= 3600; // convert hour offset to seconds

$abbrarray = timezone_abbreviations_list();

foreach ($abbrarray as $abbr)

{

foreach ($abbr as $city)

{

if ($city['offset'] == $offset)

{

return $city['timezone_id'];

}

}

}

return FALSE;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js实现向上滚动效果

源码&#xff1a;<style type"text/css"> #up_zzjs{border:1px solid #ccc;width:170px;height:182px;line-height:20px;overflow:hidden;} #up_zzjs #up_li{list-style-type:none;margin:0;padding:0;margin-left:6px;} /*系统支持ie8就选line-heigh…

利用数据的商业智能分析工具

商业智能可以定义为获取和转换原始数据的技术和工具&#xff0c;这些信息可以为业务运营提供有意义的好处。 商业智能的发展 商业智能&#xff08;BI&#xff09;是一个可追溯到19世纪中期的术语&#xff0c;基本上是一样的定义。但作为结构化数据的自动化处理的参考&#xff0…

管理之道(三) - 不要吝惜赞美

多一句赞美 人们相互希望得越多&#xff0c;想要给予对方的越多……就必定越亲密。   几天前&#xff0c;我和一位朋友在纽约搭计程车&#xff0c;下车时&#xff0c;朋友对司机说&#xff1a;“谢谢&#xff0c;搭你的车十分舒适。”这司机听了愣了一愣&#xff0c;然后说&a…

优酷视频整段代理php,thinkphp仿优酷带数据源码|php仿优酷视频源码带后台功能强大...

本项目是仿优酷官网&#xff0c;优酷官网是一个集多种知识面为一体的网站&#xff0c;能全面的锻炼我们的技能,所以我们决定仿优酷网。本项目后台主要实现了&#xff1a;用户管理、分类管理、视频管理、评论管理、权限管理、轮播管理、网站配置和广告管理以及登录退出等模块。前…

Centos7安装Oracle JDK

查看Linux是否自带的JDK&#xff0c;如有openJDK&#xff0c;则卸载1 java -version 1 rpm -qa | grep -E ^open[jre|jdk]|j[re|dk] 卸载openjdk1 su root 2 3 yum -y remove java java-1.7.0-openjdk 下载oracle jdk1 wget --no-cookies --header "Cookie: oraclelice…

前端每周清单第 30 期:WebVR 指南,Vue 代码分割范式,理想的 React 架构特性

前端每周清单专注前端领域内容&#xff0c;以对外文资料的搜集为主&#xff0c;帮助开发者了解一周前端热点&#xff1b;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎关注【前端之巅】微信公众号&#xff08;ID&#xff1a;frontshow&#xff…

Oracle(3)——Oracle图形界面工具创建数据库

具体操作步骤详情&#xff1a; 1.图形界面工具首界面 Database Configuration Assistant 点击下一步 2.默认 点击下一步 3.默认 点击下一步 4.设置全局数据库名、SID 为新建数据库起一个“全局数据库名”&#xff0c;比如这里对数据库名和SID&#xff1a;FKXT 点击下一步 5.设置…

rsa 加密 js php,security.js+RSA做出加密功能

这次给大家带来security.jsRSA做出加密功能&#xff0c;的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。在项目中遇到要对用户输入的密码进行RSA加密的需求&#xff0c;总结一下实现过程&#xff1a;JS rsa加密加密//引入security.js文件var btn doc…

多线程面试题系列(12):多线程同步内功心法——PV操作上

上面的文章讲解了在Windows系统下实现多线程同步互斥的方法&#xff0c;为了提高在实际问题中分析和思考多个线程之间同步互斥问题的能力&#xff0c;接下来将讲解PV操作&#xff0c;这也是操作系统中的重点和难点。本文将会先简要介绍下PV操作的来源和基本使用方法&#xff0c…

两离散序列卷积matlab,离散序列卷积和(用matlab实现)

数字信号处理实验报告实验一离散时间序列卷积和MATLAB实现(一)实验目的&#xff1a;学会用MATLAB对信号与系统分析的方法&#xff0c;理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。(二)实验原理&#xff1a;1、离散时间序列f1(k)和f2(k)的卷积和定义&#xff1a…

linux命令学习-4-lsof

lsof&#xff08;list open files&#xff09;是一个列出当前系统打开文件的工具。在linux环境下&#xff0c;任何事物都以文件的形式存在&#xff0c;通过文件不仅仅可以访问常规数据&#xff0c;还可以访问网络连接和硬件。 在终端下输入lsof即可显示系统打开的文件&#xff…

IOS6+ 下,使用position:sticky实现粘性布局

回顾一下 开通博客之后&#xff0c;潦草的写了几篇&#xff0c;之后由于没时间&#xff0c;加上文笔不好等等&#xff08;好吧&#xff0c;都是借口&#xff09;&#xff0c;基本上就没怎么写过了&#xff0c;其实平时也做了一些记录&#xff0c;但就是犯懒&#xff0c;没有去整…

SQL游标使用方法SQL游标使用方法(转)

1. 为何使用游标&#xff1a;    使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后&#xff0c;结果放在内存的一块区域中&#xff0c;且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问…

matlab铣削,基于MATLAB的微细铣削力分析

2010年 12月第 38卷 第 23期 机床与液压 MACH INE TOOL & HYDRAUL ICS Dec2010Vol38 No123DO I: 10. 3969 / jissn11001 - 38812010231037 收稿日期 : 2009 - 11 - 05 作者简介 : 张卫锋 (1978—) , 男 , 讲师 , 研究领域为机器人技术、仿真技术、特种加工。电话: 13656487…

软件测试作业——三

作业见《软件测试基础》中文版49页第7题。英文版63页 a) b) 令MAXPRIMES 4&#xff0c;t1不能检查出错误&#xff0c;t2发生数组越界&#xff0c;使得t2比t1更容易发现。 c)t3(n1) d)节点覆盖&#xff1a;TR{1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0…

细说Java主流日志工具库

目录 概述  java.util.logging (JUL)  Log4j  Logback  Log4j vs Logback  common-logging  slf4j  common-logging vs slf4j  总结实施日志解决方案  引入jar包    slf4j直接绑定日志组件    slf4j兼容非slf4j日志组件    spring 集成 slf4j  …

SQL2008使用json.net实现XML与JSON互转

借助CLR&#xff0c;首先实现字符串的互转&#xff0c;然后使用存储过程实现JSON2table public class JsonFunction { /// <summary> /// XML转JSON /// </summary> /// <param name"xml"></param> /// <returns></returns> ///…

黑胡桃木php,揭秘美国黑胡桃木的美

家具是艺术和文化的载体&#xff0c;人们对木的喜爱&#xff0c;是一种与生俱来的情怀。好的木材淳厚质朴、温润坚定&#xff0c;有着不动声色的力量。美国黑胡桃木(亦称黑核桃木)便是如此&#xff0c;“身体”中散发着让人无法抗拒的魅力&#xff01;美国黑胡桃木体现的是“深…

c mysql备份还原数据库,MySQL数据库备份与恢复方法

常有新手问我该怎么备份数据库&#xff0c;下面介绍3种备份数据库的方法&#xff1a;(1)备份数据库文件MySQL中的每一个数据库和数据表分别对应文件系统中的目录和其下的文件。在Linux下数据库文件的存放目录一般为/var/lib/mysql。在Windows下这个目录视MySQL的安装路径而定&a…

第四篇:白话tornado源码之褪去模板外衣的前戏

加班程序员最辛苦&#xff0c;来张图醒醒脑吧&#xff01; ... ... ... 好了&#xff0c;醒醒吧&#xff0c;回归现实看代码了&#xff01;&#xff01; 执行字符串表示的函数&#xff0c;并为该函数提供全局变量 本篇的内容从题目中就可以看出来&#xff0c;就是为之后剖析tor…