我正致力于音乐场所的调度系统。基本的想法是,有一个"创建新的时间表"页面,其上有DatePicker日历(使用AngularUI Bootstrap)。用户选择日期,然后将表演者添加到时隙中。构建的对象看起来像这样:
{
date: 2017-6-22 00:00:00.000-5:00
venue: VenueID
performances: [
{
performer: performerID,
time: 2017-06-22 22:00:23.231-5:00
},{
perfomer: performer2ID,
time: 2017-06-22 23:00:42.523-5:00
}
]
}
这里有几个问题。对于原始日期选择,我将时间(使用myDate.setHours(0,0,0,0))设置为午夜,因为时间并不重要,我只关心实际日期。同样对于时间段来说,它们的日期并不重要(因为它们属于当天的时间表),所以我只关心时间。然后在另一个项目中,我们有一个节点/ mongo应用程序保存这些日程表,并将它们返回到角度项目中的页面,该页面允许您选择编辑/等的计划。它通过获取特定场所的所有时间表来选择要返回的内容,然后执行" if(schedule.date> = new Date()。setHours(0,0,0,0)){add schedule to返回列表}"
无论如何,关于实际问题。角度应用程序执行客户端的所有日期计算。我的意思是,我在CST。如果我在日历上选择日期并保存该日期的日程安排,那么美国东部时间的某个人会在日历上选择同一天并保存日程表,他们在数据库中有不同的日期。例如,当我制定时间表时,数据库中的日期是" 2017-06-22 00:00:00.000-5:00"。当EST朋友在同一天制定时间表时,它会被保存为" 2017-06-22 00:00:00.000-4:00"。
在"选择要查看/编辑的时间表"页面,我做这样的事情:
<select ng-model="schedule" ng-options="s.date|date:'fullDate' for s in schedules" ng-show="schedules.length>=1"></select>
当然这不起作用,因为当我的EST朋友查看列表时,他会看到正确的日期。但是当我看到他创造的那个时,日期是休息一天因为&#34; 2017-06-22 00:00:00.000-4:00&#34;转换为当地时区是&#34; 2017-06-21 23:00:00.000-5:00&#34;。
我猜TL; DR我不确定如何处理它,因为场地和任何创建/编辑时间表的人可能不会共享相同的时区。我希望所有日期/时间都显示在会场的时区(我有地址。我想我可以通过地理位置找到时区吗?)。我只是不确定该怎么做。
答案 0 :(得分:0)
DatePicker为您提供日期对象。而不是存储整个值字符串只需抓住日期月份Date(value).getYear() + '-' + Date(value).getMonth() + '-' + Date(value).getDate()
。至于时代和日期一样。将这些值存储在数据库中,然后当它们返回时,您必须将它们转换回日期对象,以便日期选择器可以理解它们。
最终使用此解决方案,您只需尝试存储没有时区的日期。确保在您的应用中说明时间适用于这些区域。
答案 1 :(得分:0)
您必须区分日期/时间的传输格式,保存日期与向用户显示日期的方式。