2015-11-18 211 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