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

w7t8yxp5  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(103)

我有Firebird 3.0数据库,有日期和时间戳字段,我使用的是Interbase扩展(是的-仍然是Interbase)和Yii 2框架在PHP 7.x.

Yii::$app->db->createCommand('select order_date from orders where order_id=5');

返回值为的字段:

2019-10-15 00:00:00

AFAIU然后Yii 2使用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〉普遍接受的日期时间格式

uoifb46i

uoifb46i1#

如果你想在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 Internationalization Docs

<?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>

相关问题