以UTC格式保存并使用momentjs以本地时间显示

时间:2015-11-18 09:26:09

标签: javascript datetime momentjs

我有一个表单,用户可以保存计划日期。我希望能够将我的日期发送到utc格式。我有类似的东西:

2015-11-16 16:47:29 +0100

但问题是如果我用浏览器时区偏移更改此值,我还有时会更改日期值。上午01点的时间表和-02:00的时间偏移将改变日期。 最简单的方案是获取两个当前值并使用momentjs处理它们吗?

其他问题。如何使用momentjs显示具有正确时区的时间。呈现的原始日期如下所示:> moment('2015-11-16 16:47:29 +0100').format("dddd, MMMM Do YYYY ha") "Monday, November 16th 2015 4pm" > moment.utc('2015-11-16 16:47:29 +0100').format("dddd, MMMM Do YYYY ha") "Monday, November 16th 2015 4pm" #should be 3pm 。我尝试使用.utc method

> moment('2015-11-16 16:47:29 +0100')
Moment {_isAMomentObject: true, _i: "2015-11-16 16:47:29 +0100", _isUTC: false, _locale: Locale, _d: Mon Nov 16 2015 16:47:29 GMT+0100 (CET)…}

为什么本地不适用于第一个命令?当我做的时候

> var date = $("[name='scheduled_publication[publication_date]']").val()
> var time = $("[name='scheduled_publication[time]']").val()
> $("[name='scheduled_publication[time]']").val(moment(date + ' ' + time).toISOString())

[<input type=​"hidden" name=​"scheduled_publication[time]​" value=​"2015-11-18T14:​00:​00.000Z">​]

时区似乎得到了认可。

当你最后一次工作时很难保持健康。

编辑:

随着评论和回答。首先使用带有EST作为计算机时间的pickadate和pickatime数据插入,我设置值(11月20日23小时)并转换它们。

selected-item

除了这个非常难看的javascript。这对我来说似乎不错。值返回为UTC。适合我的数据库。

1 个答案:

答案 0 :(得分:2)

尝试使用ISO date在后端存储日期:

moment().date(23).month('August').year(2015).hour(15).minute(45).second(0).millisecond(0).toISOString();
// output: 2015-08-23T10:15:00.000Z

moment('23 aug 2015, 3:45pm', 'DD MMM yyyy, hh:mma').toISOString();
// output: 2015-08-23T10:15:00.000Z

请注意,时区信息已被删除(Z表示其位于UTC)。现在,将其显示回来:

moment('2015-08-23T10:15:00.000Z').toString(); 
// output: Sun Aug 23 2015 15:45:00 GMT+0230
你知道吗? GMT+0230自动在那里,因为当前机器的偏移量。

格式化显示:

moment('2015-08-23T10:15:00.000Z').format('dddd, MMMM Do YYYY h:mma');
// output: Sunday, August 23rd 2015 3:45pm