Json 什么决定(如何配置)php PDO驱动程序对日期和时间戳字段的值使用什么格式字符串?

Json 什么决定(如何配置)php PDO驱动程序对日期和时间戳字段的值使用什么格式字符串?,json,datetime,yii,iso8601,format-string,Json,Datetime,Yii,Iso8601,Format String,我有Firebird 3.0数据库,其中包含日期和时间戳字段,我正在PHP7.x中使用interbase扩展(是的,仍然是interbase)和Yi2框架。我有Yii代码: Yii::$app->db->createCommand('select order_date from orders where order_id=5'); 它返回具有值的字段: 2019-10-15 00:00:00 AFAIU然后Yi2使用PDO,这就是为什么我的问题归结为关于PDO的问题。PHP有Da

我有Firebird 3.0数据库,其中包含日期和时间戳字段,我正在PHP7.x中使用interbase扩展(是的,仍然是interbase)和Yi2框架。我有Yii代码:

Yii::$app->db->createCommand('select order_date from orders where order_id=5');
它返回具有值的字段:

2019-10-15 00:00:00
AFAIU然后Yi2使用PDO,这就是为什么我的问题归结为关于PDO的问题。PHP有DateTime扩展,但AFAIU PDO不使用DateTime类(也不使用Unix时间戳-秒的整数),并且istead它只是根据某种格式返回字符串


我的问题是-PDO层对SQL日期和时间戳字段使用什么格式字符串,以及如何更改该格式字符串?我希望确保返回的日期或时间戳是指定的格式,我可以从中创建DateTime实例并进一步操作该实例。例如,Firebird 3.0还没有时区,这就是为什么我想调用
$dateTimeInstance->setTimezone(…)
来完全指定实例的时区部分,然后我可以在
常量字符串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
  ]
时间检查

本地化的时区管理起来很麻烦,所以创建一个页面以便更好地理解本地化的格式。看


PHP UTC日期时间(+4小时):
PHP本地日期时间:
PHP本地时区:
数据库原始时间(预期UTC):
格式化程序->UTC到本地日期时间:
格式化程序->UTC的实时时间:

PDO不会格式化您的数据。它返回数据库服务器发送的任何内容。所以你的问题是关于火鸟的,不是PDO@YourCommonSense如果正确,PDO是访问数据库的统一方式。我认为Yii2没有原生的firebird数据库扩展。您是否使用像“edgardmessias/Yi2 firebird”这样的Yi2 firebird扩展?
<?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>