3

谢谢阅读。

只需要知道我如何将从 gmtime 中的 sql 表中获取的日期时间转换为用户时区中的日期时间。

以下是我的代码,但似乎不起作用..

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

这是对我有用的功能:-

//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 回答
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

使用 Joomla 2.5+(我认为),您可以使用以下代码

echo JHtml::_('date', $input, $format, $tz, $gregorian);

$input可以是以下值之一:

  • 当前时间的“现在”(默认)
  • date() 接受的格式的日期/时间字符串

$format可以是以下值之一:

$tz可以是以下值之一:

  • TRUE 以使用用户的时区 (DEFAULT)。注意:如果未设置用户的时区,则使用全局配置时区。
  • FALSE 使用全局配置时区
  • NULL 表示没有转换
  • 时区字符串(例如:“America/Los_Angeles”,参见http://php.net/manual/en/timezones.php

$gregorian可以是以下值之一:

  • TRUE 使用公历
  • FALSE 不使用公历(默认)
于 2016-03-28T05:51:55.807 回答
0
JHtml::date($post_arr[5]);

如果你想要不同的格式,使用第二个参数:JHtml::date($post_arr[5], DateTime::RFC2822);

这相当于: 1. 创建一个 JDate 对象,其 UTC 日期从数据库中读取 2. 在 Jomla 全局配置和用户配置中获取正确的时区 3. 调用 setTimeZone() 将您的 JDate 对象转换为用户本地时间 4.调用 format() 将 JDate 对象格式化为格式良好的字符串

于 2014-03-27T15:59:29.393 回答
0

Try This:

  $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 回答