2015-03-10 6 views
1
  • Установите значение в локальное хранилище:Даты в moment.js

    $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-storage и moment.js

+0

Я предполагаю, что $ scope.GetLocalStorage ('My-' + $ rootScope.UserId) является моментом ur(), которое является текущим временем, почему у вас есть момент («текущее время»), затем снова момент (момет (' Текущее время')) ? – Nielarshi

+0

@Nielarshi Мне нужно сохранить текущее время в локальном хранилище и позже. Где мне нужно проверить разницу хранимого значения и времени даты сейчас? – Sampath

+0

Я думаю, что у вас есть проблема с «My-» + $ rootScope.UserId »(ключ, который вы используете для хранения в локальном хранилище).Я не вижу никакой ошибки в том, как вы это делаете. Проверьте, предоставив некоторый строковый ключ, вместо того, чтобы получать от rootScope. – Nielarshi

ответ

2

moment() возвращает объект, локальное хранилище не принимает объект. Разбирает в строку перед магазином значения

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

И когда вы используете его использовать JSON.parse:

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

Да, спасибо большое :) – Sampath

2

Проблема здесь состоит в том, что момент(), при использовании его таким образом, возвращает количество миллисекунд с момента 1 января 1970 00:00:00 UTC (так же, как new Date().getTime()). Итак, теперь у вас есть номер, который вы храните в локальном хранилище, превращая его в строку.

Когда вы затем создаете новый объект moment(someString), он возвращается к использованию Date for construction, который имеет определенное поведение, поскольку вы передали ему строку (она ожидает строку с форматированием ISO 8601), которая не работает в вашем случае.

Правильный способ хранения правильного представления в локальном хранилище (который вы можете получить с помощью .format()). Вы можете оставить остальную часть кода одинаковой.

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

EDIT: Это (почти) то же самое, используя JSON.stringify(moment()) как предложено R3tep. Оба решения превратят текущее время в представление ISO 8601, чтобы сохранить его правильно как строку, чтобы вы могли использовать один из них.

+0

Большое спасибо за ваше длинное объяснение. – Sampath

Смежные вопросы