一个头刮手为你.

我正在从IPInfoDB的API获取地理IP数据,并返回与UTC的时区偏移量,包括DST(如果当前反映).

例如,我住在EST(-5),目前是DST,所以geo IP API返回(-04:00)作为偏移量.

这是美好的,因为DST是一个令人头痛的头痛.但令我惊讶的是,这又引起了头痛.

我将PHP中的数据加载到AJAX应用程序中.我想在应用程序上拥有当地IP地址的当地时间.

我已经完成了所有设置,但是我会疯狂地试图找出如何设置PHP时区来匹配偏移量,所以我可以抓住当前的小时日期(‘H’);和分钟日期(‘i’);通过AJAX传递.

我不确定是否有一个特定的功能,可以根据该偏移给我当前的时间和分钟,或者如果有一个实际的方式来设置基于偏移的时区(如果有效,它将具有应用的DST) .

我一直在搜索和搜索Google,以找到一个答案,但是我正在做的是更具体的,因为DST已被应用.

我在PHP.net上发现了一个功能,似乎在做这个伎俩(它适用于我的时区并返回正确的时间),但是对于其他时区(如PST),它返回1小时后,即使偏移量正确(-07 :00与DST).

该功能返回的时区是智利/ EasterIsland,我有一种感觉是事实.如果可以的话,我会使这只能为美国工作,但我确实需要它在世界各地.

这是我现在的功能.请原谅非常凌乱的代码.在过去几个小时里,我一直在玩大量的东西,试图找出一个解决方案.

大部分功能都是在网上找到的.

function offsetToTZ($offset) {
switch((string) $offset) {
    case '-04:30' : return 'America/Caracas'; break;
    case '-03:30' : return 'Canada/Newfoundland'; break;
    case '+03:30' : return 'Asia/Tehran'; break;
    case '+04:30' : return 'Asia/Kabul'; break;
    case '+05:30' : return 'Asia/Kolkata'; break;
    case '+05:45' : return 'Asia/Kathmandu'; break;
    case '+09:30' : return 'Australia/Darwin'; break;
}
$offset = (int) str_replace(array('0',':00',00,'30',30,'45',45,':','+'),'',(string) $offset);

$offset = $offset*60*60;
$abbrarray = timezone_abbreviations_list(); 
foreach ($abbrarray as $abbr) { 
    foreach($abbr as $city) { 
        if($city['offset'] == $offset) { 
            return $city['timezone_id'];
        }
    }
}
return false; 
}

我把某些时区的开关/箱包括在那里:30和:45.可能还有一种方法可以在不需要开关/情况的情况下也可以这样做.

注意:偏移总是从地理IP API返回00:00或-00:00.

我会感谢任何帮助或正确方向的一点.我不是PHP的新手,但是补偿是我的一个新故事.谢谢!

可以通过将偏移量转换为几秒钟并将其传递给timezone_name_from_abbr:
<?PHP
$offset = '-7:00';

// Calculate seconds from offset
list($hours,$minutes) = explode(':',$offset);
$seconds = $hours * 60 * 60 + $minutes * 60;
// Get timezone name from seconds
$tz = timezone_name_from_abbr('',$seconds,1);
// Workaround for bug #44780
if($tz === false) $tz = timezone_name_from_abbr('',0);
// Set timezone
date_default_timezone_set($tz);

echo $tz . ': ' . date('r');

Demo

timezone_name_from_abbr的第三个参数控制是否调整夏令时.

Bug #44780:

timezone_name_from_abbr() will return false on some time zone
offsets. In particular – Hawaii,which has a -10 from GMT offset,-36000
seconds.

参考文献:

> timezone_name_from_abbr
> date_default_timezone_set
> date

php – 将UTC偏移量转换为时区或日期的更多相关文章

  1. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – 将目标C中的UTC转换为当地时间

    我正在运行iOS应用我从服务器方法获取以下字符串:20140621-061250如何将其转换为当地时间?我如何定义我的日期格式化程序?

  3. uinavigationcontroller – 修复UITableViewController由于UIRefreshControl在iOS 7中的偏移量

    解决方法找到一个解决方案,同时戳更多;希望能救人几个小时!我需要在viewDidLoad:后实例化我的UIRefreshControl,或者至少在代码之前避免将其attributTitle设置为代码.设置viewDidLoad中的字符串:弄乱了iOS的控制表视图的布局,但在viewWillAppear中可以:或几何设置后更改.而我认为82分是UIRefreshControl的高度.在IB中设置刷新标题也可以避免这个问题,除了我在代码中这样做,因为我不想在每一个表中都必须启用IB刷新.

  4. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  5. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  6. swift - tableView的fream, contentInset, contentOffset, contentSize等属性

    fream类型:CGReckx:相对于父控件,在父控件中的坐标x值y:相对于父控件,在父控件中的坐标y值height:自己的高度width:自己的宽度contentOffset类型:CGPointx:相对于自己,自己的内容在x轴的偏移量y:相对于自己,自己的内容在y轴的偏移量contentInset在内容周围添加额外的滚动区域类型:UIEdgeInsetstop:上left:左bottom:下right:右

  7. SnapKit更新约束-Swift3.0

    导入SnapKit修改约束建立约束

  8. 你需要的大概不是 enumerated

    enumerated()很容易被误解。然而,它的startIndex很明显是2,而不是0,但当我们调用enumerated()和first的时候,它会返回一个元组,包含了一个offset,值为0,以及它的第一个元素“c”。而且实际上你获取到的是一个offset,而不是index,使用enumerated()也会有别的问题。很多时候你也许想用enumerated(),但有别的更好的抽象可以使用。下面是一个例子:因为这里的offset是作为一个数字去使用,enumerated()就可以正常运作。

  9. Swift*UINavigationBar动态颜色/透明度/隐藏

    所以,虽然很想省功夫,直接在navigationBar的基础上去做更改,但实际情况却很尴尬。所以如果你坚持想要使用源生navigationBar,可以继续尝试,会有办法的。viewController.swift完整代码:二、滑动隐藏/显示有一种很简单的方式,通过判断scrollView的滚动方向来隐藏/显示navigationBar,可以满足一般需求。

  10. Swift:如何创建日期时间戳和格式为ISO 8601,RFC 3339,UTC时区?

    如何生成日期时间戳,使用ISO8601和RFC3339的格式标准?目标是一个字符串,看起来像这样:格式:>年,月,日,作为“XXXX-XX-XX”>字母“T”作为分隔符>小时,分钟,秒,毫秒,作为“XX:XX:XX.XXX”。>字母“Z”作为零偏移的区域标记,a.k.a.UTC,GMT,祖鲁时间。>无需使用任何额外的框架,子项目,cocoapod,C代码等。我搜索StackOverflow,谷歌,苹果等,并没有找到一个Swift答案这个。最有希望的课程是NSDate,NSDateFormatter,NST

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部