[英]Date time difference in moment.js
將值設置到本地存儲中:
$scope.SetLocalStorage('My-' + $rootScope.UserId, moment());
從本地存儲獲取值:
var dt = moment($scope.GetLocalStorage('My-' + $rootScope.UserId));
要從本地存儲獲取日期時間:
var dTime = moment(dt);
這里顯示無效日期:
我需要以小時為單位的時差:
var timeDifference = moment().diff(moment(dTime)), 'hours');
問題:'timeDifference'總是給Nan 。
你能告訴我為什么嗎 ? 任何幫助將不勝感激。
我使用過的庫: Local-storage和moment.js
moment()
返回一個對象,本地存儲不接受對象。 在存儲值之前解析為字符串
$scope.SetLocalStorage('My-' + $rootScope.UserId, JSON.stringify(moment()));
當您使用它時,請使用JSON.parse
:
var dt = moment(JSON.parse($scope.GetLocalStorage('My-' + $rootScope.UserId)));
這里的問題在於,使用這種方式使用的moment()會返回自1970年1月1日00:00:00 UTC以來的毫秒數(與執行new Date().getTime()
)。 因此,現在您有了一個存儲在本地存儲中的數字,將其轉換為字符串。
然后,當您構造一個新的moment(someString)
對象時,它會回退到使用Date進行構造,該對象具有特定的行為,因為您向它傳遞了一個字符串(它期望使用ISO 8601格式的字符串),這種情況會失敗。
正確的方法是將正確的表示形式存儲在本地存儲中(您可以使用.format()
)。 您可以將其余代碼保持不變。
$scope.SetLocalStorage('My-' + $rootScope.UserId, moment().format());
編輯:這(幾乎)與R3tep建議使用JSON.stringify(moment())
相同。 兩種解決方案都會將當前時間轉換為ISO 8601表示形式,以便將其正確地存儲為字符串,因此您可以使用其中任何一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.