【问题标题】:Javascript date formatting for different timezones不同时区的 Javascript 日期格式
【发布时间】:2014-03-08 08:26:04
【问题描述】:

我正在构建一个事件日历应用程序,但我有点不确定这将如何输出到不同的时区。

  1. 用户创建事件,选择开始和结束日期+时间
  2. 活动在选定日期和时间显示在日历中。

这就是我如何格式化日期时间以在日历中显示:

如何从 DB 中存储/检索数据:

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:00,如果我对另一个时区的方法将根据用户时区“更改”开始/结束时间,对于日历事件列表,这将不好。

所以我的问题是,我的方法会跨时区工作,还是需要更多的工作来完成我正在寻找的东西?任何和所有建议都表示赞赏:)

【问题讨论】:

    标签: javascript datetime calendar date-formatting


    【解决方案1】:

    您的日期字符串'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答案here

    类似

    new Date('2014-03-09 12:00:00.000'.replace(' ','T') + 'Z')
    

    应该可以正常工作,只需为不支持 ISO 构造函数的浏览器添加自定义 ISOParser 即可。

    【讨论】:

      【解决方案2】:

      这只是一个合乎逻辑的问题。

      由于事件的时间是由用户输入的,你的服务器或数据库需要的所有工作就是存储它。

      假设我想创建一个从2013-03-09 17:00:00.000 GMT+0800 开始的事件,我只需输入或选择03-09 17:00,然后将此字符串提交到您的服务器。

      如果它作为字符串存储在您的数据库中,即使您对时区不做任何操作,一切都会正常工作。因为您的服务器只是简单地传输工作而不进行转换。我的浏览器上仍然显示相同的字符串。

      在另一种情况下,您将时间字符串存储为datetime 类型。在将其放入数据库之前,您必须对其进行转换。请记住,在检索它并响应客户端时,您还需要进行反向转换。在这两个转换过程中,如果没有使用时区参数(只是yyyy-MM-dd HH:mm:ss),最终我可以得到与之前输入的完全相同的结果。

      对不起,我的英语很差。我不确定我是否说清楚。

      【讨论】:

        猜你喜欢
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        • 2022-10-24
        相关资源
        最近更新 更多