3

読んでくれてありがとう。

gmtime の SQL テーブルから取得した datetime をユーザーのタイムゾーンの datetime に変換する方法を知る必要があります。

以下は私のコードですが、うまくいかないようです..

//WHERE $post_arr[5] is date from sql

$user_date=convert_date_for_user($post_arr[5]);

function convert_date_for_user($date_time){
    $user = JFactory::getUser();
    $db = JFactory::getDBO();

    $timezone=$user->getParam('timezone');

    echo $tz_offset;
    $user_date = JFactory::getDate($date_time,$timezone);
    $user_date_str = $user_date->toUnix(true);

    return $user_date_str;
}

変換されますが、上記のコードから間違った時間を取得しています。

4

7 に答える 7

5

それを行う最も簡単な方法:

$useUserTimeZone = true;
JHtml::date($sqlGmtTimestamp , 'D F n, Y', $useUserTimeZone);

$sqlGmtTimestampは GMT タイムスタンプ/日付時刻を取ります

$useUserTimeZoneは、ユーザーのタイムゾーンを使用するためのフラグです。それ以外の場合は、サーバーのタイムゾーンが使用されます。

詳細はこちら: http://docs.joomla.org/API16:JHtml/date

于 2013-06-19T21:39:23.307 に答える
1

Joomla のバージョンを指定していませんが、Joomla の JDate クラスを直接試しましたか?

// Get the User and their timezone
$user = JFactory::getUser();
$timeZone = $user->getParam('timezone', 'UTC');

// Create JDate object set to now in the users timezone.
$myDate = JDate::getInstance('now', $timeZone);

// Gets the date as UNIX time stamp.
$myDate->toUnix():


// For your example using a method
function convert_date_for_user($date_time)
{
    // Get the User and their timezone
    $user = JFactory::getUser();
    $timeZone = $user->getParam('timezone', 'UTC');

    // Create JDate object set to now in the users timezone.
    $myDate = JDate::getInstance($date_time, $timeZone);

    return $myDate->toUnix();
}
于 2013-06-18T04:13:40.093 に答える
1

ここで考えられる解決策をすべて試し、ユーザーのタイムゾーン (Joomla! v.3.9.14 ) で日付を取得できなかった場合、私の(実証済みの)解決策は次のとおりです。

$oUser_TZ  = JFactory::getUser()->getTimezone();
$aUser_tz  = (array)$oUser_TZ; // almost sure this step is not that necessary
$full_date = JFactory::getDate('now', $aUser_tz['timezone']); // pretty sure $oUser_tz->timezone will work

// I had try to use $full_date->Format('Y-m-d H:i:s') but it was giving me the non-converted-to-wanted-timezone date, so
$date_converted = substr($full_date, 0, 19);

date_converted形式Y-m-d H:i:sと希望のタイムゾーンで日付を教えてくれます。

于 2020-01-15T22:25:20.473 に答える
1

これは私のために働く機能です:-

//WHERE date_time is the format of the date taken directly from database(ie: 0000-00-00 00:00:00)
function convert_time_zone($date_time){
    $user =& JFactory::getUser();
    $db = JFactory::getDBO();
    $timezone=$user->getParam('timezone','UTC');

    $time_object = new DateTime($date_time, new DateTimeZone('UTC'));
    $time_object->setTimezone(new DateTimeZone($timezone));

    $user_datetime=$time_object->format('Y-m-d H:i:s');

    //SELECT ONLY 1 line below
    return $user_datetime;  //WOULD RETURN DATETIME IN 0000-00-00 00:00:00  
    //OR
    return $time_object->getTimestamp();  //WOULD RETURN DATETIME IN UNIX TIMESTAMP
}

joomla APIに含まれる関数を使用してそれを行うことを望んでいたので、少し邪魔になりました。誰かがより良い解決策を提供できる場合は、してください。そして、私はそれを正しい答えとして選択します。

于 2013-06-18T03:02:23.637 に答える
0

これを試して:

  $date = JFactory::getDate(); // now - 2014-03-11 08:45:22
  $date->setOffset(8); // UTC+8
  echo $date->toMySQL();  // wrong - 2014-03-11 08:45:22
  echo '<br />';
  echo $date->toFormat(); // right - 2014-03-11 16:45:22
于 2014-03-11T14:26:47.680 に答える
0
JHtml::date($post_arr[5]);

別の形式が必要な場合は、2 番目のパラメーターを使用します: JHtml::date($post_arr[5], DateTime::RFC2822);

1. データベースから読み取った UTC 日付で JDate オブジェクトを作成する 2. Jomla グローバル設定とユーザー設定で正しいタイム ゾーンを取得する 3. setTimeZone() を呼び出して、JDate オブジェクトをユーザーの現地時間に変換する 4. format() を呼び出して、適切にフォーマットされた文字列として JDate オブジェクトをフォーマットします。

于 2014-03-27T15:59:29.393 に答える