mattlewis92/angular-bootstrap-calendar 计算不同时区的错误日期

mattlewis92/angular-bootstrap-calendar calculating Wrong Dates on different Timezone

我正在使用这个日历 https://github.com/mattlewis92/angular-bootstrap-calendar 来为世界各地的人们显示事件和时间段。在注册期间,每个用户都必须设置他的时区,然后我的应用程序使用这个时区进行进一步的日期计算,而不是客户端机器时区。

问题是,当我使用 moment.tz.setDefault(timezone) 将用户时区设置为默认时区并更改机器的时区时,日历会错误地计算日期。

这是我的代码摘录:

moment.tz.setDefault($rootScope.timezone)
vm.calendarView = 'month';
vm.viewDate = moment().startOf('month').toDate(); 
vm.cellIsOpen = true;

附上截图:

[截图]

你可以看到当前用户的时区是Asia/Karachi+5,而我机器的时区是北京+8。今天的日期是 9 月 8 日,那天是星期五,但在日历上,9 月 8 日显示为星期六而不是星期五。

这个特定的 UI 控件似乎不支持选择时区。简单地使用 moment.tz.setDefault 是不够的,因为控件在内部和外部 API 中所做的一切都使用 Date 对象,它不能代表任意时区。换句话说,该控件的作者必须删除所有 .toDate() 调用并使用 Moment 对象作为控件中的原语而不是 Date 对象。这对他们来说将是一个重大改变。

我建议在该项目的 GitHub 存储库中提交问题,并参考此页面。

mwl-calendar 没有提供时区支持,你可以使用全日历

https://fullcalendar.io/ 演示 https://fullcalendar.io/js/fullcalendar-2.9.1/demos/timezones.html

它的 angular 指令可以在 https://github.com/angular-ui/ui-calendar