2011-12-22 8 views
2

У нас есть несколько вычисленных полей в списке sharepoint 2010.sharepoint date time issues

Расчеты: =DATE(YEAR(Start),MONTH(Start),1), которые вернут начало месяца.

и =DATE(YEAR(Start),MONTH(Start)+1,1)-1 которые вернутся в конце месяца.

Если у нас есть региональные настройки в sharepoint 2010 для пользователя, который настроен на «следовать настройкам в Интернете», он работает как шарм и возвращает 12/1/2011 и 12/31/2011.

Однако, если кто-то хочет персонализировать свои календари для автоматической настройки их зоны, они могут нажать My Settings, а затем My regional settings и соответствующим образом изменить свой часовой пояс.

Но, когда это происходит, расчеты по дате выше вычитают день из результатов и возвращают 11/30/2011 для начала и 12/30/2011 для конца.

Есть ли способ обойти это, кроме принуждения каждого использовать тот же часовой пояс?

ответ

0

Похоже, что ответ заключается в том, как дата и время рассчитываются в списке SharePoint. При использовании =DATE любого типа расчета вы на самом деле устанавливаете дату, поэтому, установив дату на 12/1/2011, вы на самом деле устанавливаете ее тоже 12/1/2011 12:00:00 AM. И, когда региональные времена приспосабливаются к этому, время заставляет их вернуться к предыдущему дню.

Это не намеренная вещь. И то, что можно преодолеть, добавив некоторое время к фактическому результату:

=DATE(YEAR(Start + .5),MONTH(Start + .5),1)   
=DATE(YEAR(Start - .5),MONTH(Start - .5)+1,1)-1 

Как видно из приведенных выше расчетов, то .5 на самом деле добавить несколько часов к первоначальным расчетам, которые дают нам правильные настройки, если пользователи хотят установить свои часовые пояса в нечто более обычное.

Это не работает для всех часовых поясов, однако, учитывая, что международные часовые пояса, вероятно, пересекут разницу во времени с .5 выше и отметят его день в будущем или другой день позади.

Но для нас этот вопрос решен, и наши пользователи могут снова установить , EST, CST, MST и таких в региональных настройках.

0

Не можете ли вы просто проверить часовой пояс и скорректировать расчет на основе этого swith в вашем коде?