以下是我正在处理的一些文字,它告诉用户在线销售的时间与当地时区相关。在线销售始终在太平洋时间上午9点开始,但不是每天。
我们的网上销售始于上午9点PDT 。您当地的时间,基于您的 时区设置, 2012年9月11日 - 早上12:02 HST ,即 PDT后的UTC -10 或 3 小时 。销售将从 XXam 当地时间。
在上面的示例中,用户时区为Pacific / Honolulu,存储在数据库中,并在登录时设置为名为user_tz的会话。
我计算了大部分变量。我坚持这一部分(销售将在当地时间 XXam 开始。)......这是如何确定相当于太平洋时间上午9点的当地时间,以及当地时间是否相当于是同一天或第二天取决于它们在太平洋时间之前的距离。例如,墨尔本澳大利亚,第二天,即9月12日凌晨2点开始销售,因为墨尔本比太平洋时间提前17个小时。
“XX”应该是上面示例中的上午6:00。
PHP Version 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';
}
?>