Php 解析输入字符串时的半小时时区指定

Php 解析输入字符串时的半小时时区指定,php,datetime,timezone,Php,Datetime,Timezone,我的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服务器应用程序从移动应用程序接收数据,包括日期/时间字符串

其中一个字符串最近在将字符串解析为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标准)时区


这感觉就像我要去一堆烂泥——也许有人有一个作曲家库来拯救我

所以问题是我的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
目前,我还无法确定用户代理是否会使用特定于地区/文化的分隔符,因此我假设一个范围(regexp的“,.;:"部分)。也许有一个ISO标准来规范这个格式,但是用户代理就是用户代理…:)


“GMT+0530”也会影响使用strotime()时产生的历元时间戳,因此不会丢失任何数据。

所以问题是我的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
目前,我还无法确定用户代理是否会使用特定于地区/文化的分隔符,因此我假设一个范围(regexp的“,.;:"部分)。也许有一个ISO标准来规范这个格式,但是用户代理就是用户代理…:)


“GMT+0530”还将影响使用strottime()时产生的历元时间戳,因此不会丢失任何数据。

将“.”上的字符串拆分为数组,然后只使用数组的第一个元素。实际上,将时区偏移格式转换为HH:MM会使字符串可解析:strottime(“2017-03-14 17:56:42GMT+0530”)结果是一个历元时间戳。我仍然需要将偏移量字符串转换为该格式,尽管将“.”上的字符串拆分为数组,然后只使用数组的第一个元素。实际上,将时区偏移量格式转换为HH:MM会使字符串parsable:strotime(“2017-03-14 17:56:42GMT+0530”)产生历元时间戳。我仍然需要将偏移量字符串转换为那个,虽然是的,有一个众所周知的ISO标准。它是ISO 8601,看起来像
2017-03-14T17:56:42+05:30
。另见RFC3339。如果可能,修复移动应用程序,使其不使用非标准格式。是的,有一个众所周知的ISO标准。它是ISO 8601,看起来像
2017-03-14T17:56:42+05:30
。另见RFC3339。如果可能,修复移动应用程序,使其不使用非标准格式。