javascript - moment.js 中的日期时差

标签 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

最佳答案

这里的问题是 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 表示形式,以便将其正确存储为字符串,以便您可以使用其中任何一种。

关于javascript - moment.js 中的日期时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28963673/

相关文章:

javascript - 在 JavaScript 关联数组中动态创建键

javascript - 如何使用 Javascript 从 CDN 加载外部 css 文件?

javascript - 使用 fetch 的基本身份验证(或任何身份验证)

javascript - 重置表单后验证消息未删除

javascript - AngularJS 中另一个 Controller 发生更改后 ListView 未更新

javascript - 检查 Firefox WebExtensions storage.local

php - 为什么我的 Javascript 中的 onclick 事件处理程序不起作用?

javascript - 指令中未拾取 $broadcast

javascript - ng-template 作为空字符串添加到 $templateCache

javascript - 从 readAsBinaryString 读取 AsDataURL?