我正在构建一个活动日历应用程序,我对这将如何为不同的时区输出感到有些不确定。
这是我在日历中显示日期时间的格式:
数据如何从数据库中存储/检索:
var startDate = '2014-03-09 12:00:00.000';
var endDate = '2014-03-09 17:00:00.000';
输出到日历之前的日期格式(基本上我已经有多远):
var start = new Date(startDate.replace(' ', 'T'));
var end = new Date(endDate.replace(' ', 'T'));
console.log('start: ' + start);
console.log('end: ' + end);
控制台日志:
start: Sun Mar 09 2014 12:00:00 GMT+0100 (UTC)
end: Sun Mar 09 2014 17:00:00 GMT+0100 (UTC)
这种方法工作得很好,对于我的时区,但是,我不确定这对于另一个时区如何适用,例如在美国?
该活动将开始3月9日,12月,如果我的另一个时区的方法将“更改”基于用户时区的开始/结束时间,对于日历事件列表,这将不好。
所以我的问题是,我的方法是否适用于时区,还是需要更多的工作才能完成我想要的工作?任何和所有建议都表示赞赏:)
答案 0 :(得分:0)
您的日期字符串'2014-03-09 12:00:00.000'
不存在任何时区信息,因此我可以根据浏览器的实施情况选择一个,我猜测为UTC
相反,如果您的日期存储格式为
"2011-12-19T15:28:46.493Z"
它指定的时间是UTC
因此,如果有人new Date("2011-12-19T15:28:46.493Z")
,他们将获得与此UTC
日期相对应的本地日期时间。提供,浏览器支持Date
构造函数ISODateString
检查@ckozl answer here
类似
new Date('2014-03-09 12:00:00.000'.replace(' ','T') + 'Z')
应该可以正常工作,只需为不支持ISO构造函数的浏览器添加自定义ISOParser,如果这对你很重要。
答案 1 :(得分:0)
这只是一个合乎逻辑的问题。
由于用户输入事件的时间,服务器或数据库所需的所有作业都将存储它。
假设我想要创建一个从2013-03-09 17:00:00.000 GMT+0800
开始的事件,我只需输入或选择03-09 17:00
,然后将此字符串提交给您的服务器。
如果它在数据库中以字符串形式存储,即使您对时区一无所知,一切正常。因为您的服务器只是在没有转换的情况下传输作业我仍然得到浏览器上显示的相同字符串。
在另一种情况下,您将时间字符串存储为datetime
的类型。在将其放入数据库之前,必须进行转换。请记住,在检索它并响应客户端时,您还需要进行反向转换。在这两次转换期间,如果没有采用时区参数(仅yyyy-MM-dd HH:mm:ss
),最终我可以得到与之前输入的完全相同的结果。
抱歉我的英语不好。我不确定我是否说清楚。