php - 将带有 GMT 的字符串转换为日期时间格式 - php
问题描述
我在集成 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()
功能的解决方案。
解决方案
您可以使用createFromFormat()
直接解析您的字符串。
重要的是,您需要逃脱T
并且GMT
.
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');
这将干净地交付一个您可以随意格式化的对象。
这是一个演示:
$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"
}
推荐阅读
- chart.js - 用于条件数据的 Chartjs 圆环图
- java - 内部静态类的两种实例化有什么区别
- google-cloud-datastore - 如何从数据流中获取数据存储实体 urlsafe
- c++ - 两个向量的 C++ For 循环
它的位置是字符串 - c++ - 进程挂在 WinHttpReceiveResponse()
- javascript - 未捕获的类型错误:无法读取 CanvasJS 中未定义的属性“getTime”
- jquery - 如何从 windowheight 获取滚动 div 的底部偏移量
- kubernetes - 我们在pykube中有创建StorageClass的功能吗?
- mysql - 请求 Redhat 帮助 从哪里下载 MailServer-SQL.txt 详细信息如下
- javascript - e.target.src 只更改为第一张图片