Le temps à l'aide de asTime() pas correct

0

La question

dans mon affichage de la Grille, j'ai changer la colonne de date et d'heure pour utiliser mon fuseau horaire

[
    'format' => [
       'class' => 'yii\i18n\Formatter',
       'timeZone' => 'Asia/Singapore',
    ],
    'attribute' => 'created_at',
    'label' => 'Date',
    'filter' => false,
    'value'=> function($model, $key, $index, $column){ return Search::getDateTime($model); }, }
    'format' => 'raw',
]

puis, dans ma recherche j'ai ce modèle

public static function getDateTime($model) {

        $date = Yii::$app->formatter->asDate($model->created_at);
        $time = Yii::$app->formatter->asTime($model->created_at);

        return Html::a($date, null, ['href' => 'javascript:void(0);', 'class' => 'btn btn-link p-0 rounded-0 tooltips', 'data-toggle' => 'tooltip', 'data-placement'=> 'bottom', 'title' => $time]);
    }

j'ai aussi dans mon main.php composants

'formatter' => [
            'class' => 'yii\i18n\Formatter',
            'dateFormat' => 'php:j M Y',
            'datetimeFormat' => 'php:d/m/Y h:i a',
            'timeFormat' => 'php:H:i A',
            'defaultTimeZone' => 'Asia/Singapore'
        ],

dans ma base de données les created_at est enregistré comme ceci 2021-11-22 11:28:16 UTC

comment puis-je obtenir pour afficher l'heure correcte basée sur mon fuseau horaire? (Asie/Singapour)

amazon-rds php yii2
2021-11-22 19:53:38
1

La meilleure réponse

0

Votre enregistrés datetimes de la date et de l'heure, mais pas de référence à l'UTC de la zone. Ainsi, il est impossible pour la mise en forme automatique pour l'Asie/Singapour datetime. Au lieu de cela, comme vous le savez qu'ils sont en UTC et de l'Asie/Singapour est UTC+8, vous pouvez ajouter 8 heures à votre datetimes.

Donc, j'ai ajouté le code pour:

  • Créer un objet DateTime de la created_at valeur de champ.
  • Ajout de 8 heures à elle.
  • Obtenir de nouveaux created_at valeur, avec 8 heures ajoutée.
  • Et aller de l'avant avec votre code d'origine.

Vous êtes ici:

public static function getDateTime($model)
{
    $datetime = new DateTime($model->created_at, new DateTimeZone('UTC'));
    $datetime->add(new DateInterval('PT8H'));
    $created_at = $datetime->format('Y-m-d H:i:s');

    $date = Yii::$app->formatter->asDate($created_at);
    $time = Yii::$app->formatter->asTime($created_at);

    return Html::a($date, null, ['href' => 'javascript:void(0);', 'class' => 'btn btn-link p-0 rounded-0 tooltips', 'data-toggle' => 'tooltip', 'data-placement'=> 'bottom', 'title' => $time]);
}

Et voici un autre (peut-être meilleure) façon de convertir datetime de l'UTC de fuseau horaire spécifique: UTC Chaîne de Date/Heure au Fuseau horaire

2021-11-24 13:16:29

est-il un moyen de faire ensemble ce à l'échelle mondiale? ou dois-je à chaque fois que je l'utilise asDate() et asTime() ? parce que tous mes datetimes sont enregistrés en tant que base de la date et de l'heure.
Shaho

J'utilise pour définir le fuseau horaire pour l'ensemble de mon application web, à l'aide de date_default_timezone_set(). De cette manière, mon système est dans le fuseau horaire que je veux, et datetimes sont enregistrés en DB en fonction de l'époque de la zone, afin que je puisse les utiliser comme ils sont stockés.
José Carlos PHP

À l'aide de Europe/London est une mauvaise idée. Royaume-UNI est à l'aide de l'heure système, de sorte que le fuseau horaire serait d'utiliser l'UTC pour les dates en hiver, mais l'UTC+1 pour les dates en été. Vous devez utiliser new DateTimeZone('UTC') au lieu de cela, si votre fois sont toujours enregistrés comme l'UTC.
Michal Hynčica

@MichalHynčica Vous avez raison, j'ai édité ma réponse merci!
José Carlos PHP

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................