在项目具有不同时区的列表中实现日期过滤器的好方法是什么?

时间:2016-03-29 04:49:06

标签: user-interface user-experience

我们有一个列出体育赛事的应用。一个赛事与2支球队(主队和客队)相关联。在活动列表中,我们将在主队的时区中显示活动日期。我们以UTC格式存储数据库中的日期。我们需要在事件列表页面中添加一个日期过滤器,但问题是,因为我们将数据库中的日期存储在UTC中,并且事件列表中的日期显示在主队的时区中,所以日期过滤器显示意外的结果。日期作为2016-02-18 03:30:00+00(UTC)保存在我们的数据库中。当在事件列表中向用户显示时,它是02/17/2016 7:30pm,因为主队位于宾夕法尼亚州,时区为America/New_York

现在当用户将日期过滤器设置为02/17/2016时,我们正在查询数据库以获取日期为02/17/2016的所有事件。它会导致意外的结果,因为它与事件不匹配,因为在我们的数据库中,日期为02/18/2016

我能想到的一个解决方案是show 2 date&事件列表中的时间列。

日期(UTC)|时间(UTC)|日期(主队的时区)|时间(主队的时区)

并告知用户使用日期过滤器时,它将使用日期(utc)

过滤事件

但我们目前正在寻找更好的解决方案。任何帮助/建议将不胜感激:)

编辑:

event 1:
    - date: 01/12/2016
    - time: 9:00am
    - home team's timezone: America/Chicago
event 2:
    - date: 01/12/2016
    - time: 9:00am
    - home team's timezone: America/Denver
event 3:
    - date: 01/12/2016
    - time: 9:00am
    - home team's timezone: Asia/Singapore

如果用户在日期过滤器中选择01/12/2016。它仍应显示上述3个事件。

1 个答案:

答案 0 :(得分:0)

在数据库中添加一个新字段,该字段以当地时间存储日期,并使用该字段过滤结果。

所以当你过滤说2016-04-01时,它实际上会跨越不同的时区过滤事物,即不同时代的事件

所以请告诉我所有事件,例如星期四,无论球队在哪里(意味着一支球队的星期四是另一支球队的星期五)

它会过滤本地化到存储日期的结果。

另一种解决方案是使用即时转换查询。

示例:

where convert_to_local_without_timezone(event_datetime, event_tz) = date_filter

如果没有可以实现此功能的现有功能,它可以是用户定义的函数 - http://www.postgresql.org/docs/8.0/static/xfunc.html

致记:

Aries,Ryan Johnson和Nikki Erwin Ramirez

相关问题