无法绕过如何处理日期的问题

时间:2017-06-23 05:15:07

标签: javascript angularjs date datetime angular-ui-bootstrap

我正致力于音乐场所的调度系统。基本的想法是,有一个"创建新的时间表"页面,其上有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我不确定如何处理它,因为场地和任何创建/编辑时间表的人可能不会共享相同的时区。我希望所有日期/时间都显示在会场的时区(我有地址。我想我可以通过地理位置找到时区吗?)。我只是不确定该怎么做。

2 个答案:

答案 0 :(得分:0)

DatePicker为您提供日期对象。而不是存储整个值字符串只需抓住日期月份Date(value).getYear() + '-' + Date(value).getMonth() + '-' + Date(value).getDate()。至于时代和日期一样。将这些值存储在数据库中,然后当它们返回时,您必须将它们转换回日期对象,以便日期选择器可以理解它们。

最终使用此解决方案,您只需尝试存储没有时区的日期。确保在您的应用中说明时间适用于这些区域。

答案 1 :(得分:0)

您必须区分日期/时间的传输格式,保存日期与向用户显示日期的方式。

  • 运输和保存以易于计算的格式使用UTC(例如ISO8601)。
  • 对于用户的可视化,使用some helper library将此值转换为时区和所需的用户格式。