Web应用程序中的时区敏感日期和时间显示
Time Zone Sensitive Date and Time Display in Web Applications?
我正在寻找在用户当前时区以外的时区中显示web应用程序时间的建议。
我们将日期/时间以UTC/GMT格式存储在数据库中,因此将时间格式化为UTC/GMT或用户当前时区不是问题。然而,在其他情况下,我们需要从任意时区的角度显示时间(例如,无论用户是在西海岸、中部还是东部,该页面上的每个日期/时间都是东部的)。
在过去,我们存储偏移量或时区信息,然后在。net的服务器代码中完成计算,或者我们在javascript中做了一些客户端操作,我宁愿避免,因为这一切都变得非常依赖于javascript和用户的浏览器。我想知道在更多的客户端/MVC类型的应用程序中做到这一点的最佳方法。
下面是一个例子:
- 日期存储在db: 1302790667 (Thu, 14 Apr 2011 14:17:47 GMT)
- 中央时区客户端显示的转换日期:thapr 14 09:17:47 2011
- 我实际想显示的日期,总是在东部时区:Thu Apr 14 10:17:47 2011
在上面的例子中,获取UTC(#1)或用户当前时区(#2)的时间很容易,但获取#3就比较困难了。我的选择似乎是:
- 在数据库中存储偏移量或时区,并在客户端进行计算-这是我们过去在。net中所做的,但在客户端代码中似乎更混乱是我们目前试图避免的路径。
- 在服务器上进行转换并发送完整的日期以显示给客户端-客户端接收字符串("Thu Apr 14 10:17:47 2011")。这可以工作,但不是很灵活。
- 在服务器上进行转换,将其分解成部分并将其发送给客户端,然后将它们重新组合在一起。("{DayOfWeek:Thu, Month:Apr, Day:14, Hour:10, Minute:17}")。这为我们提供了正确的数据,并在格式化日期方面提供了更多的灵活性,但在这种情况下感觉有点错误。
还有其他选择吗?其他人是如何处理类似情况的?谢谢。
我们的结果:
- 我尝试了一些库,如Datejs、MS Ajax等,但我对它们从来都不满意。Datejs在我的几个测试用例中根本不起作用,没有积极维护,并且似乎非常关注我们不需要的语法糖(date.today().first().thursday()等)我们确实使用jQuery进行一些基本的日期/时间解析。我遇到了很多"自己动手"的客户端日期转换"技巧",其中大多数只处理到UTC的转换,开始工作得很好,然后最终在一些边缘情况下崩溃。这是90%的标准UTC转换的解决方案,但没有解决我们的"任意时区"问题。
在转换例程添加的代码复杂性和它们似乎引起的错误之间,我们决定在大多数时候避免客户端日期处理。我们使用现有的日期处理例程在服务器上进行日期转换,并将格式化的日期或信息作为属性传递给视图使用。如果我们需要一个单独的日期,我们只需添加另一个属性。通常我们一次只需要几个属性(即EventDateUTC, eventdatellocal, EventDateAlwaysAustralia和EventDayOfWeek)。
我建议您查看一下Datejs库。它为基本的JavaScript日期操作提供了一系列扩展,包括"setTimezone()"方法和将日期转换为格式化字符串以供显示的灵活方法。
当问题中没有明确允许使用库时,我通常会犹豫是否建议使用库,但是Datejs不是很大,而且非常可靠(尽管它被称为"alpha"版本)。如果您不希望依赖这样的东西,那么您可能希望看看它,看看它的扩展是如何实现的基础。
- 更改angularjs中的日期-时间格式
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 将日期时间从json转换为可读格式
- 使用时刻.js从日期时间中提取时间
- 两个日期时间选择器
- Javascript:如何在onChange事件期间更改日期时间值
- .Net webApi ISO日期时间和IE8
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 转换日期时间格式
- 在JavaScript中转换日期/时间格式
- JavaScript JSON关联对象键和值都作为日期时间戳
- 将日期时间javascript绑定到表列
- 将JS日期解析为C#日期时间
- 使用JavaScript将客户端日期/时间字符串转换为JSON日期/时间串
- 从javascript数组获取php的日期时间
- 格式化momentjs日期时间
- 这个正则表达式的日期/时间有什么问题
- Mongoose查询在两个日期时间之间提取数据
- 当转换为Python日期时间时,Node的时间戳落后3分钟
- 自定义angularjs过滤器日期时间格式额外字符