2015-11-18 162 views
0

我有一个表格,可以使用该表格保存日程安排日期。我希望能够将我的发送日期转换为utc格式。我有类似:以UTC保存并在当地时间显示当前时间

<input type="hidden" name="scheduled_publication[publication_date]" value="2015/11/27"> 
<input type="hidden" name="scheduled_publication[time]" value="13:00"> 

但问题是,如果我改变与浏览器的时区这个值的偏移量,我也有时更改日期值。凌晨01点的时间表和-02:00时间偏移量将改变日期。 最简单的情况是获取两个当前值并用momentjs处理它们吗?

其他问题。如何使用momentjs以正确的时区显示时间。原始日期呈现如下:2015-11-16 16:47:29 +0100。我尝试使用.utc method

> 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 

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

> 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)…} 

时区似乎被认可。

当你在最后工作的时候很难保持一致。

编辑:

随着意见和答复。首先将数据插入以pickadate和pickatime作为计算机时间的EST,然后将值(11月20日23小时)设置并转换它们。

> 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">​] 

除了这个相当丑陋的JavaScript。这对我来说似乎很好。值的返回值是UTC。适合我的数据库。

+1

保存并在UTC格式返回(毫秒自Unix纪元会做)。它只是在客户端上显示本地时区(客户端机器)时,会自动用于调整UTC日期。您不必自己处理时区,除非特殊情况。 –

+0

感谢您的回答。所以为了显示,没关系。我只需要设法从用户​​插入的内容创建正确的utc时间。 – Mio

+1

您将不得不知道用户输入的模式或部分。见答案。 –

回答

1

尝试使用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 
+0

嗨@ s-d感谢您的回答。我用'.toISOString();'这个技巧编辑了我的问题,这是一个不错的方法。如果我能为您反馈我所做的事情。 – Mio