moment.js中的日期时差

时间:2015-03-10 12:24:47

标签: javascript angularjs local-storage momentjs

  • 将值设置为本地存储:

    $scope.SetLocalStorage('My-' + $rootScope.UserId, moment()); 
    
  • 从本地存储中获取值:

    var dt = moment($scope.GetLocalStorage('My-' + $rootScope.UserId));
    
  • 要从本地存储中获取日期时间:

    var dTime = moment(dt);
    

此处显示无效日期:

enter image description here

我需要小时的时差:

var timeDifference = moment().diff(moment(dTime)), 'hours');

问题:'timeDifference'始终提供 Nan

你能告诉我为什么吗?任何帮助都将受到高度赞赏。

我使用的库:Local-storagemoment.js

2 个答案:

答案 0 :(得分:2)

moment()返回一个对象,本地存储不接受对象。在存储值

之前解析为字符串
$scope.SetLocalStorage('My-' + $rootScope.UserId, JSON.stringify(moment())); 

当您使用它时,请使用JSON.parse

var dt = moment(JSON.parse($scope.GetLocalStorage('My-' + $rootScope.UserId)));

答案 1 :(得分:2)

这里的问题是moment(),当以这种方式使用时,返回自1970年1月1日00:00:00 UTC以来的毫秒数(与执行new Date().getTime()相同)。所以现在你有了一个数字,你将它存储在本地存储中,然后把它变成一个字符串。

当你构造一个新的moment(someString)对象时,它会回退到使用Date构造,它有一个特定的行为,因为你传递了一个字符串(它需要一个ISO 8601格式的字符串),它在你的情况下。

正确的方法是将正确的表示存储在本地存储中(使用.format()可以获得)。您可以将其余代码保持不变。

$scope.SetLocalStorage('My-' + $rootScope.UserId, moment().format());

编辑:这与(或几乎)与使用JSON.stringify(moment())的R3tep建议相同。两种解决方案都会将当前时间转换为ISO 8601表示,以便将其正确存储为字符串,以便您可以使用其中任何一种。