Я создаю надстройку для Outlook, которая активна во время создания / редактирования события календаря Outlook.Надстройка обращается к времени начала / окончания события с помощью API, описанного здесь .Это дает объект Time, описанный здесь , для которого я использую getAsync (), чтобы получить объект Date.
Согласно моей интерпретации документации о start свойство, аргумент «результата» обратного вызова, вызываемого getAsync () , должен быть временем, выраженным как UTC, но это не так (он выражается по местному времени).
Но это, насколько я понимаю, особенность даты в JavaScript, и я могу справиться с этим.Реальная проблема, с которой я столкнулся, заключается в том, что outlook 365 позволяет выбрать часовой пояс в форме создания события, как можно увидеть здесь .Когда я меняю часовой пояс, доступ к свойству start из надстройки приводит к другому времени (которое также выражается в местном времени).Я ожидал бы того же времени (как и прежде, чем выбрать другой часовой пояс).Глядя на событие, созданное Outlook в календаре, также становится ясно, что Outlook знает, что это то же самое время, выраженное в другом часовом поясе.
Итак, чтобы сделать это более конкретным:
- создать новое событие в календаре, которое, например, начинается в 11:30 и заканчивается в 13:00 (выбранный часовой пояс в форме составления соответствует местному времени, например, "Brussels Copenhagen Madrid, UTC + 1")
- при доступе к свойству start из надстройки мы получаем объект Date, который содержит «11:30 UTC + 1» (для пользователя, находящегося в этом часовом поясе)
- теперь мы меняем часовой пояс в форме, к «Москва, Санкт-Петербург, Волгоград, UTC + 3».
- при чтении свойства start мы теперь получаем объект Date, который содержит «13:30 UTC + 1», но мы ожидаем того же«10:30 UTC» или, может быть, «11:30 UTC + 1».Причина, по которой мы ожидаем, что это будет то же самое, заключается в том, что изменение часового пояса, в котором выражено время, не должно перемещать событие во времени.И на самом деле outlook не перемещает событие (как видно из календаря), но свойство start говорит нам, что оно делает.
Мне известно о Office.context.mailbox.методы convertUtcClientTime () и Office.context.mailbox.convertToLocalClientTime (), но, насколько я понимаю, и могу тестировать, я не могу использовать их, чтобы получить то, что хочу.
Поэтому мой вопрос: неправильно ли я понялчто-то или я что-то не так делаю, и если да, то как мне узнать в реальном времени, когда событие начинается / заканчивается (предпочтительно в UTC), но не в зависимости от выбранного часового пояса?
Редактировать: такое поведение наблюдается в настольной версии Outlook (ежемесячный канал «нажми и работай» версии 1901, работающий в Windows 10), а также в Outlook в Интернете (https://outlook.office365.com/) на нескольких веб-платформах. Наш манифестXML-файл для надстройки содержит следующий раздел
<Hosts>
<Host Name="Mailbox" />
</Hosts>
<Requirements>
<Sets>
<Set Name="Mailbox" MinVersion="1.1" />
</Sets>
</Requirements>
Файл index.html надстройки содержит следующее:
<script type="text/javascript"
src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js">
</script>