Php 使用Ical时如何停止日光节约更改?
基本上,当用户单击我的下载按钮时,我会使用Php 使用Ical时如何停止日光节约更改?,php,icalendar,dst,Php,Icalendar,Dst,基本上,当用户单击我的下载按钮时,我会使用href=“download.php”并从那天起向用户日历添加84天的日历通知 我的问题是夏令时发生了,在夏令时之后,它突然变为09:00 我想停止,并确保所有日历通知都在08:00发出 但我似乎不知道该怎么做 下面是my download.php代码: <?php header("Content-type: text/calendar");//iphone header("Content-Disposition: attachment; file
href=“download.php”
并从那天起向用户日历添加84天的日历通知
我的问题是夏令时发生了,在夏令时之后,它突然变为09:00
我想停止,并确保所有日历通知都在08:00发出
但我似乎不知道该怎么做
下面是my download.php代码:
<?php
header("Content-type: text/calendar");//iphone
header("Content-Disposition: attachment; filename=pillintake.ics");//iphone
// the iCal date format. Note the Z on the end indicates a UTC timestamp.
define('DATE_ICAL', 'Ymd\THis\Z');
// max line length is 75 chars. New line is \\n
$output = "BEGIN:VCALENDAR
METHOD:PUBLISH
VERSION:2.0
PRODID:-//dev//test Schedule//EN\n";
$startTime = strtotime( date('Y-m-d 08:00') );
$endTime = strtotime($Date. ' + 84 days');
$startTime = str_replace("Z","",$startTime);
// Loop between timestamps, 24 hours at a time
$count = 1;
for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
$currentDate = date(DATE_ICAL, $i);
$output .=
"BEGIN:VTIMEZONE
TZID:Europe/Stockholm
X-LIC-LOCATION:Europe/Stockholm
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Ta din tablett
DESCRIPTION: Glöm inte! \n\n
UID:0000".$count."
STATUS:OK
DTSTART:" . $currentDate . "
DTEND:" .$currentDate . "
LAST-MODIFIED:" .$currentDate . "
LOCATION:
END:VEVENT\n";
$count = $count +1;
}
$output .= "END:VCALENDAR";
echo $output;
?>
尽管您的问题是如何停止夏令时更改我假设您只希望您的通知总是在同一个本地时间发生,而不考虑
DST
您的日历文件就快到了。关键点与定义VTIMEZONE
组件类似,但您还需要告诉日历工具哪个事件属性(DTSTART
,DTEND
,…)应该使用此TZID
属性
在您的情况下,您的提醒应该有两行这样的内容
…DTSTART;TZID=欧洲/斯德哥尔摩:20160323T00000 数据终端;TZID=欧洲/斯德哥尔摩:20160323T00000
有关更多详细信息,您可以参考和,尽管您的问题是如何停止夏令时更改我假设您只希望您的通知始终在本地时间发生,而不考虑
DST
您的日历文件就快到了。关键点与定义VTIMEZONE
组件类似,但您还需要告诉日历工具哪个事件属性(DTSTART
,DTEND
,…)应该使用此TZID
属性
在您的情况下,您的提醒应该有两行这样的内容
…DTSTART;TZID=欧洲/斯德哥尔摩:20160323T00000 数据终端;TZID=欧洲/斯德哥尔摩:20160323T00000
有关更多详细信息,请参阅,您的代码看起来不错,但您可能需要检查一些内容。 如果DTSTART值包含“Z”,则需要将其删除 请尝试以下代码:
...
$currentDate = date(DATE_ICAL, $i);
$currentDate = str_replace("Z","",$currentDate);
$output .=
"BEGIN:VTIMEZONE
TZID:Europe/Stockholm
X-LIC-LOCATION:Europe/Stockholm
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Ta din tablett
DESCRIPTION: Glöm inte! \n\n
UID:0000".$count."
STATUS:OK
DTSTART;TZID=Europe/Stockholm:" . $currentDate . "
DTEND;TZID=Europe/Stockholm:" .$currentDate . "
LAST-MODIFIED:" .$currentDate . "
LOCATION:
END:VEVENT\n";
$count = $count +1;
}
...
希望这对您有所帮助您的代码看起来不错,但是您可能需要检查一些东西。 如果DTSTART值包含“Z”,则需要将其删除 请尝试以下代码:
...
$currentDate = date(DATE_ICAL, $i);
$currentDate = str_replace("Z","",$currentDate);
$output .=
"BEGIN:VTIMEZONE
TZID:Europe/Stockholm
X-LIC-LOCATION:Europe/Stockholm
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Ta din tablett
DESCRIPTION: Glöm inte! \n\n
UID:0000".$count."
STATUS:OK
DTSTART;TZID=Europe/Stockholm:" . $currentDate . "
DTEND;TZID=Europe/Stockholm:" .$currentDate . "
LAST-MODIFIED:" .$currentDate . "
LOCATION:
END:VEVENT\n";
$count = $count +1;
}
...
希望这有助于添加一个校正器:
date(“I”)
哪个是“0”或“1”@Axalix我不确定您的意思:/添加一个校正器:date(“I”)
哪个是“0”或“1”@Axalix我不确定您的意思:/我们尝试使用您提到的这些格式,但是结果是一样的,它将在27日增加1小时。我们尝试使用你提到的这些格式,但结果是一样的,它将在27日增加1小时。