簡體   English   中英

moment.js中的日期時間差

[英]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-storagemoment.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM