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-storage and moment.js
moment()
returns一个对象,本地存储不接受对象。在存储值之前解析为字符串
$scope.SetLocalStorage('My-' + $rootScope.UserId, JSON.stringify(moment()));
当你使用它时使用 JSON.parse
:
var dt = moment(JSON.parse($scope.GetLocalStorage('My-' + $rootScope.UserId)));
这里的问题是 moment(),当以这种方式使用它时,returns 自 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 表示形式,以便将其正确存储为字符串,因此您可以使用其中任何一种。
将值设置到本地存储:
$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 and moment.js
moment()
returns一个对象,本地存储不接受对象。在存储值之前解析为字符串
$scope.SetLocalStorage('My-' + $rootScope.UserId, JSON.stringify(moment()));
当你使用它时使用 JSON.parse
:
var dt = moment(JSON.parse($scope.GetLocalStorage('My-' + $rootScope.UserId)));
这里的问题是 moment(),当以这种方式使用它时,returns 自 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 表示形式,以便将其正确存储为字符串,因此您可以使用其中任何一种。