我的Php服务器应用程序从移动应用程序接收数据,包括日期/时间字符串。
其中一个字符串最近在将字符串解析为DateTime实例时导致异常,因为时区的格式如下:
2017-03-14 17:56:42GMT + 05.500
strtotime("2017-03-14 17:56:42GMT+05.500")
返回false,而
strtotime("2017-03-14 17:56:42GMT+05")
返回一个纪元时间戳。
处理此类字符串的最佳做法是什么?
我可以在生成的时间戳上用grep替换和偏移半小时,然后指定一个有效的(通过php标准)时区。
感觉就像我要去找一大堆泥土 - 也许是某种善良的人有一个作曲家图书馆来救援
答案 0 :(得分:0)
所以问题是我的php应用程序无法理解' GMT + 05.500'时区部分,但可以了解' GMT + 0530'。
我可以使用下面的正则表达式来查明我的输入是否需要更换字符串并将任何小数转换为相应的偏移量,以分钟为单位
if(preg_match('/\+0?[\d]([,.:;_ ])([\d]{3})$/', $datetime, $matches){
//... convert 'GMT+05.500' to 'GMT+0530' by using a switch or actual calculation
目前我还没有能够确定用户代理是否会使用区域设置/文化特定的分隔符,因此我假设了一系列的可能性(',。;:_&#39 ;正则表达式的一部分)。也许有一个ISO标准,如何格式化,但用户代理是用户代理......:)
' GMT + 0530'在正确的30分钟内使用strtotime()时,也会影响生成的纪元时间戳,因此不会丢失任何数据。