2014-11-05 81 views
0

我想创建集成电路开始和结束时间(UTC)与格式,如:如何从时区,PHP的字符串日期获取时间戳?

DTSTART:20141107T110000Z 
DTEND:20141107T120000Z 

我有以下对象作为输入:

"event": { 
    "timezone": "GMT+2", 
    "start_time": "2014-11-07 13:00:00", // client local time 
    "duration": 30 
    }, 

function _calc_end_date($start, $duration) { 
    $start_date = new DateTime($start, new DateTimeZone('UTC')); 
    $end_date = $start_date->add(new DateInterval('PT'.$duration.'M')); 
    $end_date_str = $end_date->format('Y-m-d H:i:s'); 
    return $end_date_str; 
} 

private function dateToCal($timestamp) { 
    return GMDATE("Ymd\THis\Z", $timestamp); 
} 

$timezone = $event['timezone']; // ????  
$start = strtotime($event['start_time'] . " UTC"); 
$end_date = $this->_calc_end_date($event['start_time'], $event['duration']); 
$end = strtotime($end_date . " UTC"); 

所以我写:

"DTSTART:" . $this->dateToCal($start) . $eol . 
"DTEND:" . $this->dateToCal($end) . $eol . 

这段代码有效,但是我得到了2小时不同的结果。正如你可以注意到我没有进入TimeZone,因为我不知道如何。

$timezone = $event['timezone']; // 

不知怎的,我需要解析 “GMT + 2”,并计算

$start = strtotime($event['start_time'] . " UTC"); 

与TZ。

请帮帮忙,

+0

如果您使用UTC为什么你需要一个时区? UTC在全世界都是一样的 – mgrenier 2014-11-05 20:47:57

+0

客户端iOS发送当地时间+他的TZ让我正确计算UTC。 – snaggs 2014-11-05 20:48:38

+0

所以你有UTC,你想计算当地时间? – mgrenier 2014-11-05 20:50:24

回答

1
$date = DateTime::createFromFormat("Y-m-d H:i:s O", $event['start_time'] . ' ' . $event['timezone']); 
$date->setTimezone(new DateTimeZone('GMT')); 
$startDate = $date->format("Ymd\THis\Z"); 

$date->add(new DateInterval('PT' . $event['duration'] . 'M')); 
$endDate = $date->format("Ymd\THis\Z"); 
0

使用串并的indexOf的“+”后抢的一切,并添加数个小时的时间

0

什么是源区名称?此代码的工作对我来说:

date_default_timezone_set('UTC'); 
echo date('Y-m-d H:i', strtotime("2014-11-07 13:00:00 Europe/Warsaw")); 
相关问题