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

时间:2017-09-08 12:31:12

标签: angularjs datetime timezone momentjs angular-bootstrap-calendar

我正在使用此日历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;

附件是截图:

[截图]

enter image description here

您可以看到用户的时区目前是亚洲/卡拉奇+5,我的机器时区是北京+8。今天的日期是9月8日,当天是星期五,但是9月8日的日历显示为星期六而不是星期五。

2 个答案:

答案 0 :(得分:1)

mwl-calander没有提供时区支持,你可以使用完全压缩

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

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

答案 1 :(得分:0)

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

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