为了账号安全,请及时绑定邮箱和手机立即绑定

ICS 将根据时区添加到日历时调整日期

ICS 将根据时区添加到日历时调整日期

PHP
哔哔one 2023-04-28 14:45:23
我已经下载了一个 PHP 脚本,它允许我为预定的网络研讨会生成可下载的 ICS。日期和时间设置为 WP ACF 发布。此外,WordPress 时区设置为 America/Los_Angeles。但我的时区位于菲律宾马尼拉。这是代码。// ACF Date$wdate = get_sub_field('date'); // Tuesday, June 16, 2020$stime = get_sub_field('start_time'); // 11:00 am$etime = get_sub_field('end_time'); // 11:30 am// Prepare Date using date_i18n()// Starting DateTime$st_gmt = $wdate.' '.$stime;$st = get_date_from_gmt($st_gmt, 'Y-m-d H:i:s');$date_start = date_i18n(get_option('date_format').' '.get_option('time_format'), strtotime($st));// Output: June 16, 2020 11:00 AM// Ending DateTime$et_gmt = $wdate.' '.$etime;$et = get_date_from_gmt($et_gmt, 'Y-m-d H:i:s');$date_end = date_i18n(get_option('date_format').' '.get_option('time_format'), strtotime($et));// Output: June 16, 2020 11:30 AM每当我测试下载 .ics 日历文件时,它应该是June 17, 2020 2:00 AM & June 17, 2020 2:30 AM,但输出始终设置为June 16, 2020 7:00 PM & June 16, 2020 7:30 PM,因为我来自菲律宾马尼拉,而事件设置为洛杉矶。这是实际 ICS 文件的输出。BEGIN:VCALENDARVERSION:2.0X-WR-TIMEZONE:America/Los_AngelesPRODID:-//hacksw/handcal//NONSGML v1.0//ENCALSCALE:GREGORIANBEGIN:VTIMEZONETZID:America/Los_AngelesEND:VTIMEZONEBEGIN:VEVENTLOCATION:Webinar ZoomDESCRIPTION:This is my descriptionDTSTART:20200616T110000ZDTEND:20200616T113000ZSUMMARY:This is my summaryURL;VALUE=URI:DTSTAMP:20200603T051015ZUID:5ed6c0375fbf6END:VEVENTEND:VCALENDAR问题:当用户下载文件并添加到他们的日历时,如何输出 ics 文件以匹配用户时区?
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

我假设您尚未明确提出的问题是时间如何关联。

首先请注意, ics VTIMEZONE 用于时区定义,即当实际夏令时发生变化时,它不用于表示事件是在洛杉矶时间。如果 DST 在该时区相关,它实际上应该包含一系列夏令时日期。

VTIMEZONE 没有说明 VEVENTS 的开始和结束时间。

在此文件中,事件 DTSTART 定义为 UTC 时间(请参阅 Z?)上午 11 点。这相当于洛杉矶时间凌晨 4 点和马尼拉时间晚上 7 点。

时间在应用程序中的显示方式取决于用户和应用程序的时区。应用程序应将 ics 事件时间转换为用户时区。


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信