2017-02-24 83 views
1

我有一個表格,用戶用以下格式輸入日期:YYYY-MM-DD如何從mongoDB獲取日期並使用moment.js顯示它?

我在Mongo DB中存儲日期。默認情況下,MongoDB將其存儲爲UTC日期。

例子: 用戶輸入2018年2月6日 蒙戈店:「星期二2018年2月6日00:00:00 GMT + 0000(UTC)」

可以說,我想顯示此追溯到用戶。

下面的代碼給了我錯了日期:

var eventDateString = $('#hiddenDate').val() // Just gets the date as stored in mongo 
var dateObj = new Date(eventDateString) 
var dateMom = moment(dateObj).format('dddd, MMMM DD YYYY'); 
console.log(dateMom) 

什麼會打印爲: 「星期一,2018年2月5日」 這是不正確的日期應該是二月6

爲什麼這是否發生?

我試圖這樣做是爲了解決這一問題:

var eventDateString = $('#hiddenDate').val(); 
$('#show-eventDate').text(moment.utc(eventDateString).format('dddd, MMMM DD YYYY')); 

我得到正確的結果: 「星期二,2018年二月六日」

不過,我得到以下警告:

enter image description here

(棄用警告:提供的值不是以公認的ISO格式。 Date(),它在所有瀏覽器和版本中都不可靠。非ISO日期格式不鼓勵,並將在即將發佈的主要版本中刪除。請參閱http://momentjs.com/guides/#/warnings/js-date/瞭解更多信息....)

如何解決此問題?

回答

1

你是相當接近的解決方案,你必須使用moment.utc告訴那一刻,你的輸入是UTC,並通過format參數,以避免棄用警告

代碼示例:

var eventDateString = $('#hiddenDate').val(); 
 
var mom = moment.utc(eventDateString, 'ddd MMM DD YYYY HH:mm:ss ZZ'); 
 
$('#show-eventDate').text(mom.format('dddd, MMMM DD YYYY'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> 
 

 
<input id="hiddenDate" type="hidden" value="Tue Feb 06 2018 00:00:00 GMT+0000 (UTC)"> 
 
<div id="show-eventDate"></div>

0

所以,我這樣做是爲了避免貶值的警告,和它的工作

var eventDateString = $('#hiddenDate').val(); 
var index = eventDateString.indexOf('00:00'); 
var shortDate = eventDateString.substr(0,index-1); 
$('#show-eventDate').text(moment(shortDate, 'ddd MMM DD YYYY').format('dddd, MMMM DD YYYY')); 

但我不喜歡這樣,我硬編碼'00想法:00' - 任何更好的解決方案,將不勝感激

0

這只是一個小編輯到VincenzoC的響應

,而不是時刻(EVENTDATE ....),正確的解決方案具有的時刻。 utc(.....)

var eventDateString = $('#hiddenDate').val(); 
var mom = moment.utc(eventDateString, 'ddd MMM DD YYYY HH:mm:ss ZZ'); 
$('#show-eventDate').text(mom.format('dddd, MMMM DD YYYY')); 
+0

我編輯了我的aswer修復代碼片段nd我知道'moment.utc',因爲我建議在我的答案的第一部分使用它(我只是忘記在片段中使用它)。我真的不承認爲什麼你標記爲接受你的第一個答案,爲什麼你發佈了這個新的答案,而不是評論我的或建議編輯它。 – VincenzoC

+0

對不起。我對此很陌生 – Asool

相關問題