Timp folosind asTime() nu este corect

0

Problema

în vizualizarea Grilă trebuie să schimbați coloana ora și data pentru a-mi folosesc fus orar

[
    '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',
]

apoi, în căutarea mea am acest model

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]);
    }

am, de asemenea, acest lucru în mea main.php componente

'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'
        ],

în baza de date created_at este salvat astfel de prognoze 2021-11-22 11:28:16 UTC

cum a face i a lua pentru a afișa ora corectă pe baza de fus orar? (Asia/Singapore)

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

Cel mai bun răspuns

0

Salvate datetimes sunt data și ora, dar nici o referire la orar UTC. Deci, este imposibil să autoformat le Asia/Singapore datetime. În loc de asta, după cum știți că acestea sunt în UTC, iar Asia/Singapore este UTC+8, puteți adăuga 8 ore la datetimes.

Deci, am adăugat cod pentru:

  • A crea un obiect DateTime din created_at valoare de câmp.
  • Adauga 8 ore la ea.
  • Obține noi created_at valoare, cu 8 ore de adăugat.
  • Și merge mai departe cu codul original.

Esti aici:

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]);
}

Și aici este un alt (poate mai bun) mod de a converti datetime de la UTC la fusul orar specific: UTC/Data String la fusul Orar

2021-11-24 13:16:29

există o modalitate de a face acest set la nivel global? sau trebuie să-l de fiecare dată când am folosi asDate() și asTime() ? pentru că toate datetimes sunt salvate în DB fi data și ora.
Shaho

Am folosit pentru a seta fusul orar pentru întreaga aplicație web, folosind date_default_timezone_set(). În acest fel, sistemul meu este în zona de fus orar vreau, și datetimes sunt salvate în DB în funcție de care zona de timp, așa că am le pot folosi ca acestea sunt stocate.
José Carlos PHP

Folosind Europe/London este o idee proastă. Marea BRITANIE este folosind lumina zilei de economisire de timp de sistem, astfel încât zona de fus orar ar folosi UTC pentru datele în timpul iernii, dar UTC+1 pentru datele de vara. Ar trebui să utilizați new DateTimeZone('UTC') în schimb, dacă vremurile sunt întotdeauna salvate ca UTC.
Michal Hynčica

@MichalHynčica Ai dreptate, am editat raspunsul meu va multumesc!!!
José Carlos PHP

În alte limbi

Această pagină este în alte limbi

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