Ical datum omzetten naar timestamp
Vanwege de corona maatregelen ben ik eens begonnen aan een oud project, het maken van een fotokadertje met agenda, weerbericht en nieuws met armbian, lamp en chrome.
Alles lukt, ik ben er tevreden over, enkel bij het kalender stuk loopt er iets mis. Ik haal de kalenders op via Caldav, en krijg hiermee de events in Ical. Deze zet ik om naar xml zodat ik er mee aan de slag kan.
De datum's komen binnen als 20200410T155000Z of 20200410 of 20200410T155000
Nu zou onderstaande functie hier een timestamp van moeten maken maar hij loopt soms achter
Input: 20200302T130000
Array ( [0] => 2020 [1] => 03 [2] => 02 [3] => 13 [4] => 00 [5] => 00 )
Output: 1583150400 (03/02/2020 @ 12:00pm (UTC))
of
Input: 19750528
Array ( [0] => 1975 [1] => 05 [2] => 28 [3] => 0 [4] => 0 [5] => 0 )
Output: 170463600 (05/27/1975 @ 11:00pm (UTC)) of "18/04/2020 12:00" op het scherm (moet 00:00 zij)
Het is niet de beste manier om het te doen, komt door de vele pogingen.
Ik vermoed dat het iets te maken heeft met de timezone maar weet niet hoe, wat en waar.
Heeft er iemand even tijd?
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static function toTimestamp($input, $timezone = null) {
$ip = str_split($input); //20200402T141618Z
$year = $ip[0].$ip[1].$ip[2].$ip[3];
$month = $ip[4].$ip[5];
$day = $ip[6].$ip[7];
if(strpos($input, 'T') !== false) {
$hour = $ip[9].$ip[10];
$minite = $ip[11].$ip[12];
$second = $ip[13].$ip[14];
} else {
$hour = 0;
$minite = 0;
$second = 0;
}
$date = new DateTime();
if($timezone != null) {
$date->setTimezone(new DateTimeZone($timezone));
}
$date->setDate($year, $month, $day);
$date->setTime($hour, $minite, $second);
return date_format($date, 'U');
}
$ip = str_split($input); //20200402T141618Z
$year = $ip[0].$ip[1].$ip[2].$ip[3];
$month = $ip[4].$ip[5];
$day = $ip[6].$ip[7];
if(strpos($input, 'T') !== false) {
$hour = $ip[9].$ip[10];
$minite = $ip[11].$ip[12];
$second = $ip[13].$ip[14];
} else {
$hour = 0;
$minite = 0;
$second = 0;
}
$date = new DateTime();
if($timezone != null) {
$date->setTimezone(new DateTimeZone($timezone));
}
$date->setDate($year, $month, $day);
$date->setTime($hour, $minite, $second);
return date_format($date, 'U');
}
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15