Web应用程序中的时区敏感日期和时间显示?

时间:2011-04-14 14:36:00

标签: javascript .net asp.net asp.net-mvc datetime

我正在寻找有关在用户当前时区以外的时区内在网络应用程序中显示时间的建议。

我们将日期/时间以UTC / GMT格式存储在数据库中,因此格式化UTC / GMT时间或用户当前时区不是问题。但是,在其他情况下,我们需要从任意时区的角度显示时间(即此页面上的每个日期/时间都在东部,无论用户是否在西海岸,中部,东部,等等。)。

过去我们已经存储了偏移量或时区信息,然后在.Net中的服务器代码中完成了计算,或者我们已经在javascript中做了一些客户端操作,我宁愿避免,因为它们都变得非常依赖在javascript和用户的浏览器上。我想知道在更客户端/ MVC类型的应用程序中执行此操作的最佳方法。

以下是一个例子:

  1. 日期存储在db:1302790667(星期四,2011年4月14日14:17:47 GMT)
  2. 在中央时区为客户显示的转换日期:2011年4月14日星期四09:17:47
  3. 我实际想要显示的日期,总是在东部时区:2011年4月14日星期四10:17:47
  4. 在上面的示例中,很容易获得UTC(#1)或用户当前时区(#2)的时间,但获得#3更加困难。我的选择似乎是:

    1. 在数据库中存储偏移量或时区并在客户端上进行计算 - 这是我们过去使用.Net所做的事情,但在客户端代码中看起来更加混乱是我们目前试图避免的路径。
    2. 在服务器上进行转换并向客户端发送完整日期以显示 - 客户端收到一个字符串(“Thu Apr 14 10:17:47 2011”)。这有效,但不是很灵活。
    3. 在服务器上进行转换,将其分解为部分并将其发送到客户端,然后将它们重新组合在一起。 (“{DayOfWeek:Thu,Month:Apr,Day:14,Hour:10,Minute:17}”)。这为我们提供了正确的数据,并为我们在格式化日期方面提供了更大的灵活性,但对于这种情况感觉有点不对。
    4. 还有其他选择吗?其他人如何处理类似情况?感谢。

2 个答案:

答案 0 :(得分:1)

我们的结果:

  1. 我尝试了一些像Datejs,MS Ajax等的库,我对它们一直很满意。 Datejs在我的一些测试用例中完全不起作用,没有积极维护,似乎很关注我们不需要的语法糖(date.today()。first()。thursday(),等)
  2. 我们使用jQuery进行一些基本的日期/时间解析。
  3. 我遇到了很多“自己动手”的客户端日期转换“hacks”,其中大多数只解决了转换为UTC,开始工作正常,然后最终在一些边缘情况下崩溃了。 This one是很多标准UTC转换的90%解决方案,但没有解决我们的“任意时区”问题。
  4. 在添加的转换例程的代码复杂性和它们似乎导致的错误之间,我们决定在大多数时间避免客户端日期处理。我们使用现有的日期处理例程在服务器上进行日期转换,并将格式化的日期或信息作为属性传递给视图使用的属性。如果我们需要一个单独的日期,我们只需添加另一个属性。我们通常只需要一些属性(即EventDateUTC,EventDateLocal,EventDateAlwaysAustralia和EventDayOfWeek)。

答案 1 :(得分:0)

我建议您查看Datejs库。它提供了一系列基本的JavaScript日期操作扩展,包括“setTimezone()”方法和将日期转换为格式化字符串以供显示的灵活方法。

在问题中没有明确允许使用库时,我通常会犹豫建议库,但Datejs不是很大而且非常可靠(即使它被称为“alpha”版本)。如果你不想依赖这样的东西,你可能还是想看看它,只是为了看看它的扩展是如何实现的基础。