Ics tarih / saat biçimi ile php dilimini Yönetme

2 Cevap php

Tamam, ben google takvim ICS dosyalarını ayrıştırmak için ICS çözümleyici programını kullanıyorum. Bu Gün ışığından olur google .. bana uct da olayların kez beslerken ben şimdi 5 saat çıkarmamız lazım ve 6 saat dışında, harika çalışıyor.

Ben kullanıyorum başlangıç ​​saatini almak için:

$timestart = date("g:iA",strtotime(substr($event['DTSTART'], 9, -3)));
//$event['DTSTART'] feeds me back the date in ICS format: 20100406T200000Z

Saat dilimi ve yaz saati nasıl başa Yani herhangi bir öneriniz?

Şimdiden teşekkürler

2 Cevap

Sadece substr (kod) parçası kullanmayın. strtotime yyyymmddThhiissZ biçimlendirilmiş dizeyi ayrıştırmak mümkün olduğunu ve timezone = UTC olarak Z yorumlar.

örneğin

$event = array('DTSTART'=>'20100406T200000Z');
$ts = strtotime($event['DTSTART']);

date_default_timezone_set('Europe/Berlin');
echo date(DateTime::RFC1123, $ts), "\n";

date_default_timezone_set('America/New_York');
echo date(DateTime::RFC1123, $ts), "\n";

baskılar

Tue, 06 Apr 2010 22:00:00 +0200
Tue, 06 Apr 2010 16:00:00 -0400

edit: ya DateTime ve DateTimeZone sınıfları kullanmak

$event = array('DTSTART'=>'20100406T200000Z');
$dt = new DateTime($event['DTSTART']);

$dt->setTimeZone( new DateTimezone('Europe/Berlin') );
echo $dt->format(DateTime::RFC1123), "\n";

$dt->setTimeZone( new DateTimezone('America/New_York') );
echo $dt->format(DateTime::RFC1123), "\n";

(Çıkış aynıdır)

Eğer zaman dilimi yerel ayarı ettiyseniz, siz de o zaman geçerli zaman dilimini döndürecektir tarihini ("T") kullanabilirsiniz.

echo date("T");

Because we're in Daylight Saving Time, (in my timezone) it returns: EDT

Sonra dilimi ayarı ayarlamak için bir IF deyimi bu kullanabilirsiniz.

if (date("T") == 'EDT')
  $adjust = 6;
else
  $adjust = 5;