2015-08-21 8 views
2

Предположим, что я получаю строку типа 08/22/2015 10:56 PM и что эта строка даты/времени всегда относится только к одному конкретному часовому поясу. Мне нужно преобразовать его в этот формат: 'Ymd\THis\Z', который является форматом iCal.PHP: преобразовать локальное время в UTC

  1. Как преобразовать эту строку в зулу время и в 'Ymd\THis\Z'
  2. Как потом добавить, скажем, 30 минут на эту дату/время?

Была попытка взломать это с помощью strtotime и DateTime, но я беспокоюсь, что я об этом не так. Может быть, есть более простое и более прямое решение?

+0

Я не думаю, что есть «простой» способ, чем использование 'DateTime' и т.д. – m02ph3u5

ответ

5

Вы можете использовать DateTime, пример ниже:

<?php 

$datetime = '08/22/2015 10:56 PM'; 
$tz_from = 'America/New_York'; 
$tz_to = 'UTC'; 
$format = 'Ymd\THis\Z'; 

$dt = new DateTime($datetime, new DateTimeZone($tz_from)); 
$dt->setTimeZone(new DateTimeZone($tz_to)); 
echo $dt->format($format) . "\n"; 

$minutes = 30; 
$dt->add(new DateInterval('PT' . $minutes . 'M')); 
echo $dt->format($format) . "\n"; 
+0

И что о добавлении 30 минут? – StackOverflowNewbie

+0

@StackOverflowNewbie Я обновил ответ –

0

в соответствии с темой; Чтобы конвертировать по местному времени в UTC, вам нужно указать часовой пояс для данного местного времени, или если у вас есть timezone offset в GMT; Вы можете попробовать следующее:

//assume time zone is +3 hours 
$offset = 3 * 60 * 60; 
$date = date('H:i:s', strtotime("10:56 PM")- $offset); 
echo $date; 

Этот выход будет: 19:56:00 который UTC Время

Смежные вопросы