将带有 GMT 的字符串转换为日期时间格式 - php [重复]

Posted

技术标签:

【中文标题】将带有 GMT 的字符串转换为日期时间格式 - php [重复]【英文标题】:Convert a String with GMT to DateTime Format - php [duplicate] 【发布时间】:2020-04-24 17:09:30 【问题描述】:

我在集成 bKash 在线支付网关 API 时遇到了这个问题。 文档在这里 - https://developer.bka.sh/docs/create-payment-1。

在“创建付款”部分 bKash 返回 paymentCreateTime 字符串,格式如下。

2020-01-07T11:55:34:438 GMT+0600

如何将其转换为2020-01-07 11:55:34 以保存在 mysql 中?

我找到了类似以下方式的解决方案。

$input     = "2020-01-07T11:55:34:438 GMT+0600"                   // "2020-01-07T11:55:34:438 GMT+0600"
$timestamp = substr($input,0,19);                                 // "2020-01-07T11:55:34"
$mysql     = date_format(date_create($timestamp),'Y-m-d H:i:s');  // "2020-01-07 11:55:34"

但我需要一个没有substr() 功能的解决方案。

【问题讨论】:

这能回答你的问题吗? how to convert php date formats to GMT and vice versa? 使用 Carbon::parse()->format(Y-m-d H:i:s); @Raymond - 以下链接不像将 '2020-01-07T11:55:34:438 GMT+0600' 转换为日期时间格式的解决方案。需要指定代码。 【参考方案1】:

你可以这样使用它

date_default_timezone_set("Asia/Dhaka");
$mysql1 = date_format(date_create(strtotime($input)),'Y-m-d H:i:s');

它将打印2020-01-07 09:17:23

【讨论】:

这里,如果我设置 $input = "2020-01-07T11:55:34:438 GMT+0600";然后,strtotime($input) // false date_create(strtotime($input)) // date: 2020-01-07 14:23:31.486348 Asia/Dhaka (+06:00) 那是现在时间,不是 $输入变量时间。 我们是容纳 3 位微秒还是 6 位? 更新了代码。只需设置 date_default_timezone_set("Asia/Dhaka");在您的代码顶部。它会给你当前时间 >>> $input => "2020-01-07T11:55:34:438 GMT+0600" >>> date_default_timezone_set("Asia/Dhaka"); => true >>> $mysql1 = date_format(date_create(strtotime($input)),'Y-m-d H:i:s'); =>“2020-01-07 15:55:51”对不起。这不是完美的结果。 那你需要什么?【参考方案2】:

您可以使用createFromFormat() 直接解析您的字符串。

重要的是,您需要转义 TGMT

https://www.php.net/manual/en/datetime.createfromformat.php 中的所有其他内容

$input = '2020-01-07T11:55:34:438 GMT+0600';
$date = DateTime::createFromFormat('Y-m-d\Th:i:s:u \G\M\TO', $input);
echo $date->format('Y-m-d h:i:s');

这将干净地交付一个您可以随意格式化的对象。

这是demonstration:

$date = new DateTime("now");
echo $date->format('Y-m-d\Th:i:s:u \G\M\TO');

echo "\n---\n";

$input = '2020-01-07T11:55:34:438 GMT+0600';
echo $input;

echo "\n---\n";

$date = DateTime::createFromFormat('Y-m-d\Th:i:s:u \G\M\TO', $input);
echo $date->format('Y-m-d h:i:s');

echo "\n===\n";

var_dump($date);

演示输出:

2020-01-07T10:12:53:000245 GMT+0100
---
2020-01-07T11:55:34:438 GMT+0600
---
2020-01-07 11:55:34
===
object(DateTime)#2 (3) 
  ["date"]=>
  string(26) "2020-01-07 11:55:34.438000"
  ["timezone_type"]=>
  int(1)
  ["timezone"]=>
  string(6) "+06:00"

【讨论】:

以上是关于将带有 GMT 的字符串转换为日期时间格式 - php [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 GMT+# 格式的日期时间转换为 GMT

将 GMT 时间转换为特定的字符串格式 [重复]

如何将php日期格式转换为GMT,反之亦然?

NSDate - 将日期转换为 GMT

将 GMT 日期时间转换为本地时区日期时间

用户日期时间设置为 GMT,如何将日期转换为其本地化设置?