我有 Firebird 3.0 数据库,其中包含日期和时间戳字段,并且我正在使用 interbase 扩展(是的 - 仍然是 interbase)和 PHP 7.x 中的 Yii2 框架。我有 Yii 代码:
Yii::$app->db->createCommand('select order_date from orders where order_id=5');
它返回具有值的字段:
2019-10-15 00:00:00
AFAIU 然后 Yii2 使用 PDO,这就是为什么我的问题简化为有关 PDO 的问题。 PHP 具有 DateTime 扩展,但 AFAIU PDO 不使用 DateTime 类(也不使用 Unix 时间戳 - 秒整数),而是仅根据某种格式返回字符串。
我的问题是 - PDO 层对 SQL 日期和时间戳字段使用什么格式字符串以及如何更改该格式字符串?我想确保返回的日期或时间戳采用指定的格式,我可以从中创建 DateTime 实例并进一步操作该实例。例如。 Firebird 3.0 还没有时区,这就是为什么我想打电话$dateTimeInstance->setTimezone(...)
完全指定实例的时区部分,然后我可以安全地输出该值const string DateTimeInterface::ISO8601 = "Y-m-d\TH:i:sO"
JSON 普遍接受的日期时间格式的格式>
如果您希望在 Yii2 中全局配置格式,您应该在通用配置中设置一些本地化设置:
配置示例
'timeZone' => 'America/New_York', // Default PHP date in Eastern.
//... other config stuff
'components' => [
'formatter' => [
'dateFormat' => 'php:Y-m-d',
'datetimeFormat' => 'php:Y-m-d H:i:s',
'decimalSeparator' => '.',
'thousandSeparator' => ',',
'defaultTimeZone' => 'UTC', // DB Source is stored as UTC timezone.
'timeZone' => 'America/New_York', // When formatter is used, convert to this timezone.
],
//... other config stuff
]
时间检查
本地化时区管理起来很麻烦,因此创建一个页面以便您更好地理解本地化格式。看Yii2 国际化文档 https://www.yiiframework.com/doc/guide/2.0/en/tutorial-i18n
<?php
$now = (new \yii\db\Query)->select('NOW()')->scalar(Yii::$app->db);
?>
<table class="table">
<tr>
<th>PHP UTC dateTime (+4 Hours):</th>
<td><?= gmdate('Y-m-d H:i:s')?></td>
</tr>
<tr>
<th>PHP local dateTime:</th>
<td><?= date('Y-m-d H:i:s')?></td>
</tr>
<tr>
<th>PHP local timeZone:</th>
<td><?= date_default_timezone_get() ?></td>
</tr>
<tr>
<th>Database Time Raw (expected UTC):</th>
<td><?= $now ?></td>
</tr>
<tr>
<th>Formatter -> UTC to local dateTime:</th>
<td><?= Yii::$app->formatter->asDatetime(gmdate('Y-d-m H:i:s')) ?></td>
</tr>
<tr>
<th>Formatter -> realtiveTime from UTC:</th>
<td><?= Yii::$app->formatter->asRelativeTime(gmdate('Y-m-d H:i:s')) ?></td>
</tr>
</table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)