我正在使用PHP中的图表,并为一个网站构建一个日历小部件,该小部件应仅提取今天的活动,包括全天活动。
一切正常,但它也会拉动昨天的全天活动,我无法弄清楚我做错了什么。
$today = new DateTime( 'now', new DateTimeZone( 'America/New_York' ) );
$tomorrow = new DateTime( 'tomorrow', new DateTimeZone( 'America/New_York' ) );
$start_date = $today->format('Y-m-d');
$end_date = $tomorrow->format('Y-m-d');
$events = ms_get_data_as_json( 'calendarview?startdatetime=' . $start_date . '&enddatetime=' . $end_date . '&$orderby=start/DateTime' );
格式化的请求字符串输出为calendarview?startdatetime=2018-05-18&enddatetime=2018-05-19&$orderby=start/DateTime
,这似乎可以正常工作,但是发送此请求时,返回的第一个对象是前一天的全天事件。见样本输出:
[0] => stdClass Object
(
[createdDateTime] => 2018-05-18T13:30:37.8672462Z
[lastModifiedDateTime] => 2018-05-18T13:34:25.2248155Z
[categories] => Array
(
)
[originalStartTimeZone] => UTC
[originalEndTimeZone] => UTC
[reminderMinutesBeforeStart] => 1080
[isReminderOn] =>
[hasAttachments] =>
[subject] => Test yesterday
[bodyPreview] =>
[importance] => normal
[sensitivity] => normal
[isAllDay] => 1
[isCancelled] =>
[isOrganizer] => 1
[responseRequested] => 1
[seriesMasterId] =>
[showAs] => free
[type] => singleInstance
[onlineMeetingUrl] =>
[recurrence] =>
[responseStatus] => stdClass Object
(
[response] => organizer
[time] => 0001-01-01T00:00:00Z
)
[body] => stdClass Object
(
[contentType] => html
[content] =>
)
[start] => stdClass Object
(
[dateTime] => 2018-05-17T00:00:00.0000000
[timeZone] => UTC
)
[end] => stdClass Object
(
[dateTime] => 2018-05-18T00:00:00.0000000
[timeZone] => UTC
)
)
开始属性显然是前一个日期。
我试图更改我的查询以包含时间戳startdatetime=2018-05-18T00:00:01Z&enddatetime=2018-05-18T23:59:59Z
但我仍然得到相同的结果。我已尝试将$today
和$tomorrow
变量更改为使用UTC,因为返回的结果显示OriginalStartTimeZone
为UTC,但我仍然得到相同的结果。
感谢任何帮助。
答案 0 :(得分:0)
我认为应用开始/结束日期过滤器的方式存在一些不平等问题,最终会包括在开始时间结束(或从结束时间开始)的事件。
目前,解决方案似乎是在滤波器的开始时间增加1秒,并从滤波器的结束时间减去1秒。您仍然可以获得所请求日期的全天活动,但不能获得前一天或下一天的全天活动。
如果您发现无法使用此方法的情况,请告诉我们!