Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用时区PHP从字符串日期获取时间戳?_Php_Datetime - Fatal编程技术网

如何使用时区PHP从字符串日期获取时间戳?

如何使用时区PHP从字符串日期获取时间戳?,php,datetime,Php,Datetime,我想创建ics开始和结束时间(UTC),格式如下: 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, $dur

我想创建ics开始和结束时间(UTC),格式如下:

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  = $event['timezone']; // 
不知何故,我需要解析“GMT+2”并计算

$start = strtotime($event['start_time'] . " UTC");
和TZ在一起


请帮助,

使用substring和indexof获取“+”之后的所有内容,并将小时数添加到时间中

源时区名称是什么?此代码适用于我:

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

如果您使用UTC,为什么需要时区?UTC在世界各地都是一样的客户端iOS发送他的本地时间+他的TZ让我正确计算UTC。那么您有UTC,您想计算本地时间吗?我需要将他的本地时间+TZ转换为UTC格式(时间戳)
$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" );