0

下面是我正在处理的一些文本,它告诉用户在线销售的开始时间相对于他们当地的时区。在线销售总是在太平洋时间上午 9 点开始,但不是每天都开始

我们的在线销售从太平洋夏令时间上午 9 点开始。根据您的时区设置,您的当地时间是2012 年 9 月 11 日 - 上午 12:02 HST比 PDT 晚UTC -103小时。销售将于当地时间上午 XX点开始。

在上面的示例中,用户的时区是 Pacific/Honolulu,并且存储在数据库中,并且在他们登录时也在名为 user_tz 的会话中设置。

我计算了大部分变量。我被困在这部分(销售将在当地时间上午XX点开始。)...这是如何确定当地时间相当于太平洋时间上午 9 点,以及当地时间相当于是同一天还是下一天天取决于他们比太平洋时间提前多远。例如,澳大利亚墨尔本,由于墨尔本比太平洋时间早 17 小时,因此销售将于次日 9 月 12 日凌晨 2:00 开始。

在上面的示例中,“XX”应该是早上 6:00。

PHP 版本 5.3.14

<?php
// gets the users time zone offset in seconds from UTC
// shown above as -10
$user_tz_offset = getTimeZoneOffset($_SESSION['user_tz']);

// gets the dst code of the timezone ...example: pdt or pst
// shown above as HST
$dateTime = new DateTime(); 
$dateTime->setTimeZone(new DateTimeZone($_SESSION['user_tz'])); 
$user_tz_dst = $dateTime->format('T'); 

// gets the difference in hours from Pacific time to the users time zone
// shown above as 3
$hours_diff = abs(($user_tz_offset - TZ_OFFSET)/3600);

// gets the users local time
// shown above as September 11, 2012 - 12:02 am HST
$user_time_now = date("F j, Y \- g:i a", (time()+$user_tz_offset));

// add a plus sign to time zones that are not negative
if( !strstr( $user_tz_offset, "-" ))
{
    $add_plus_sign = '+';
}

// determine whether we should say "ahead of" or "behind" respective to Pacific time
// TZ_OFFSET is a constant defined in config
if( $user_tz_offset < TZ_OFFSET)
{
    $behind_or_ahead = 'behind';
}
else
{
    $behind_or_ahead = 'ahead of';

}
?>
4

0 回答 0