Verkeerde tijden met iCalendar in Google

Pagina: 1
Acties:

Onderwerpen


  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 19-07 19:30
Ik kwam gisteren op het idee om de wedstrijden van FC Twente die ik bijhoud in een database aan te bieden met iCalendar, zodat je met een klik de wedstrijden in je kalender hebt staan. Nu heb ik 't zo dat hij de wedstrijden keurig in een vcs bestand zet en deze wordt keurig gelezen door zowel Outlook als Google Calendar, alleen het probleem is dat hij bij Google de tijd niet goed zet. Ik heb (voor mijn gevoel) al ''alles'' geprobeerd, met tijdzones en dergelijke, maar het lukt mij niet :(

De complete code die keurig in Outlook de wedstrijden laat zien:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
include('connect.php');

$wedstrijden = mysql_query("SELECT *, SEC_TO_TIME(TIME_TO_SEC(tijd)+6300) AS eindtijd 
FROM v_wedstrijden AS wedstrijden, v_seizoenen AS seizoenen, v_clubs AS clubs, 
v_competities AS competities WHERE wedstrijden.seizoenid = seizoenen.seizoenid AND 
wedstrijden.clubid = clubs.clubid AND wedstrijden.competitieid = competities.competitieid AND 
datum >= CURDATE()");

$ical = "BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:Wedstrijden FC Twente";

while($wedstrijd = mysql_fetch_array($wedstrijden))
{
    $datum = str_replace("-", "", $wedstrijd['datum']);
    $tijd = str_replace(":", "", $wedstrijd['tijd']);
    $eindtijd = str_replace(":", "", $wedstrijd['eindtijd']);
    $datumstamp = date('Ymd');
    $tijdstamp = date('His');
    
    if($wedstrijd['waar'] == 'Thuis')
    {
        $summary = "SUMMARY:FC Twente - ".$wedstrijd['club']."";
    }
    elseif($wedstrijd['waar'] == "Uit")
    {
        $summary = "SUMMARY:".$wedstrijd['club']." - FC Twente";
    }

$ical .= "
BEGIN:VEVENT
DTSTAMP:".$datumstamp."T".$tijdstamp."Z
DTSTART:".$datum."T".$tijd."
DTEND:".$datum."T".$eindtijd."
".$summary."
LOCATION:".$wedstrijd['competitie']."
UID:".$wedstrijd['wedstrijdid']."
END:VEVENT";
}

$ical .= "
END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.vcs');
echo $ical;
exit;
?>


Zoals gezegd heb ik het één en ander geprobeerd, namelijk:

DTSTART;TZID=Europe/Amsterdam ipv DTSTART, ik heb met de Z zitten stoeien achter deze waarden. Als ik Europe/Amsterdam er bij heb staan, dan laat hij in Outlook pak 'm beet de eerste 5 wedstrijden qua tijd ook niet goed zien (+ 1/2 uur), maar alle wedstrijden erna laat hij wel de juiste tijd zien (ook dan laat Google niet de juiste tijden zien) |:(. Als ik het vcs bestandje open die hij dan gemaakt heeft dan staan daar keurig de juiste tijden in... Zoals je ziet heb ik wat geprobeerd (ook gegoogled, maar daar kom je weinig bruikbare informatie tegen), maar ik kom er niet uit, weet iemand van jullie het misschien? _/-\o_

Acties:
  • +1 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Je kunt niet zomaar een tijdzone-ID opgeven in het iCalendar-formaat, de tijdzone zelf moet er ook in gespecificeerd staan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BEGIN:VTIMEZONE
TZID:Europe/Amsterdam
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
END:STANDARD
END:VTIMEZONE


Je kunt het ook zonder tijdzones doen, maar dan moeten alle tijden UTC time (de Z-postfix, Zulu time) zijn.

Het is of de een, of de ander:
The TZID property parameter MUST NOT be applied to DATE-TIME properties whose time values are specified in UTC.
Als de tijdzone ontbreekt én je gebruikt geen Z-postfix, dan werk je met floating time. Die vindt Outlook in ieder geval niet leuk en volgens mij struikelt ook Google Calendar erover.

Maar waarom gebruik je niet gewoon een library?

[ Voor 49% gewijzigd door CodeCaster op 27-09-2012 16:46 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 19-07 19:30
Hoe bedoel je dat precies, met dat de tijdzone zelf er ook in gespecificeerd in moet staan? Dat doe je dus niet met die TZID=Europe/Amsterdam? Waarom de eerste paar wedstrijden + 2 uur staan en de wedstrijden erna (na 27 oktober) + 1 uur is vanwege de wintertijd kom ik net achter :P

Edit: oh, je edit nog niet gelezen, even doen

[ Voor 7% gewijzigd door mauricedb op 27-09-2012 16:58 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

mauricedb schreef op donderdag 27 september 2012 @ 16:58:
Hoe bedoel je dat precies, met dat de tijdzone zelf er ook in gespecificeerd in moet staan? Dat doe je dus niet met die TZID=Europe/Amsterdam?
Een tijdzone waaraan je refereert met een TZID-property moet bestaan in dezelfde VCALENDAR-data:
An individual "VTIMEZONE" calendar component MUST be specified for each unique "TZID" parameter value specified in the iCalendar object.
Outlook (2010 althans) is ook behoorlijk uitgebreid met z'n foutmeldingen. Als je een ics-feed via HTTP/webcal toevoegt en op "Send/Receive All Folders" klikt, dan krijg je rechtsonderin precies te zien of, en zo ja wat er mis is met je kalenders.

@fl1p: ja, of je zorgt gewoon dat je data aan de standaarden voldoet, dan werkt het gewoon overal, ook na een update van Google / Mozilla / Microsoft / Apple, en kunnen je gebruikers gewoon onderling de links uitwisselen.

[ Voor 30% gewijzigd door CodeCaster op 27-09-2012 17:13 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


  • fl1p
  • Registratie: Juli 2005
  • Laatst online: 21-03 13:42
Ik heb dit ook voorgehad, en heb dit opgelost door gewoon bij de tijd handmatig een halfuur toe te voegen als het in Google zal worden geïmporteerd...

Maak een aantal linkjes: Outlook 2010, Google Calendar, Apple iCal

Problem solved O-)

  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 19-07 19:30
En hoe zorg ik ervoor dat de data aan de standaarden voldoet? :P Ik bedoel, als een wedstrijd om 20:45 op 29-09-2012 begint, dan is 't DTSTART: 20120929T204500 blijkbaar dus niet wat jullie zeggen. Ik kan mij ook niet indenken dat het optellen van een half uur zal helpen, er moet juist tijd van afgetrokken worden. Alvast sorry voor mijn onwetendheid :P.

Edit: Om eerlijk te zijn, ik vind het allemaal een beetje warrig, hoe het uitgelegd wordt op bijv http://www.kanzaki.com, als je weet hoe het moet zal het waarschijnlijk allemaal logisch zijn, maar voor mij in ieder geval niet :-(

Edit 2: Is het een slim idee om de wedstrijden tussen 25 maart en 28 oktober met 2 uur te verminderen en de andere wedstrijden met 1 uur? Hierdoor kom je op UTC tijd, zoals jij al eerder aangaf CodeCaster.

[ Voor 39% gewijzigd door mauricedb op 27-09-2012 18:40 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Dat kan, ja.

Maar als je dus dat blok tijdzone-informatie dat ik al gaf gewoon toevoegt aan de data die je al uitvoert, kun je bij alle data die je gebruikt wél TZID=Europe/Amsterdam gebruiken.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 19-07 19:30
Ik heb dat eergisteren geprobeerd, maar toen zag ik geen verandering :-(

Ik heb er nu een groter scriptje van gemaakt waarbij hij kijkt naar de data en tijden van de winter/zomertijd en daar past hij vervolgens de tijd op aan. Werkt nu goed! :D
Pagina: 1