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
我正在使用这个日历 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