使用PHP处理夏令时

时间:2015-07-31 15:02:46

标签: php wordpress

我正在使用Wordpress制作一个需要有效处理夏令时的网站。 我已经制作了两个PHP函数,用于将本地用户时间存储为服务器上的UTC,db和另一个将服务器UTC时间转换为本地用户时间以进行显示。

它们如下: -

//display saved UTC dates to Local user time

function ServerTimeToLocal($serverTime){
    $user_id=get_current_user_id();
    $user_timezone = get_user_meta($user_id, "user_timezone", true);

    date_default_timezone_set(SERVER_TZ);   
    $utc_start_stamp = strtotime($serverTime);

    date_default_timezone_set($user_timezone );

    $whichday_local =  date("D", $utc_start_stamp);
    $start_time_local =  date("h:i A", $utc_start_stamp);

    return array("day"=>$whichday_local, "time"=>$start_time_local);
}

//store local user time as UTC on server
function LocalTimeToServer($localTime){
    $user_id=get_current_user_id();
    $user_timezone = get_user_meta($user_id, "user_timezone", true);

            //store timings by local time
    date_default_timezone_set($user_timezone );

    $start_timestamp = strtotime($localTime);
            //convert to server timezone
    date_default_timezone_set(SERVER_TZ);

            //echo $whichday." ".$start_time." ";

    $whichday_server = date("D", $start_timestamp);
    $start_time_server =  date("h:i A", $start_timestamp);
    return array("day"=>$whichday_server, "time"=>$start_time_server);  
}

虽然我知道日期(' I')用于确定夏令时(DST)是否生效,但如何将DST纳入我的功能?

由于

2 个答案:

答案 0 :(得分:0)

我通常会这样处理DST ......

if( date('I') != 1 )
{
    return date('Y-m-d H:i:s', ( time() + 3600 ));
}

return date('Y-m-d H:i:s');

这将检查夏令时是否有效,如果是,那么它将返回日期,并添加小时。如果没有,它将只返回日期。

我把它包装在函数getDate()中。来得非常方便

答案 1 :(得分:0)

由于您注意到WordPress,您应该使用WordPress的本机函数来执行此操作,而不是编写自己的函数。

例如,而不是ServerTimeToLocal()使用get_gmt_from_date()