2014-02-19 3 views
1

Я храню данные на ежедневной основе в localStorage, и при этом я хочу использовать дату как «первичный ключ».Округление Дата до ближайшего дня в Javascript.

Я использую JSON.stringify() и .parse() для хранения данных таким образом:

localStorage.setItem(datakey, JSON.stringify(dataObject)); 
dataObject = JSON.parse(localStorage.getItem(datakey)); 

Я хочу использовать дату как DataKey, и приложение будет просто перезаписывать данные, записанные ранее в в день, если вы запишете еще раз в тот же день.

Поэтому мне нужно округлить дату до текущего дня, месяца и года.

На данный момент я пытаюсь это:

selected_d  = $("#date-1").val(); 
console.log("The date is "+selected_d); 
dateArray  = selected_d.split("-"); 
day    = dateArray[2]; 
month   = dateArray[1]; 
year   = dateArray[0]; 
datakey  = new Date(year, month, day); 
console.log("The datakey is "+datakey); 

Причиной использования раскола является то, что # дата-1 является дата JQuery Mobile и поставляется в формате гггг-мм-дд и I хотите использовать стандартный формат Великобритании dd/mm/yy.

из положить из бревен консоли:

The date is 2014-02-18 
The datakey is Tue Mar 18 2014 00:00:00 GMT+0000 (GMT Standard Time) 

Я знаю, что это происходит потому, что Ян = 0, = 1 февраля и так далее.

Мне очень понравился способ создания «идеального» объекта даты для меня. Тот, который содержит только дни, месяцы и годы, и тот, который находится в формате DD/MM/YYYY, поэтому я могу легко запросить localStorage. Я знаю, что смогу восстановить дату:

var displayed_d = (day<10 ? '0' : '') + day + "/"+ (month<10 ? '0' : '') + month_up + "/" + current_d.getFullYear(); 

но это не идеальный вариант, не так ли?

Любые идеи?

+0

новый Дата (JSON. parse ('' 2014-02-19 "')) – gberger

ответ

2

Почему бы не просто сформировать ключ, используя API?

var d = new Date(); // or wherever the date comes from 

var key = function(d) { 
    function two(n) { 
    return (n < 10 ? '0' : '') + n; 
    } 

    return two(d.getDate()) + '/' + two(d.getMonth() + 1) + '/' + d.getFullYear(); 
}(d); 

Вы могли бы добавить, что в качестве функции по дате прототипа:

Date.prototype.getDateKey = function() { 
    function two(n) { 
    return (n < 10 ? '0' : '') + n; 
    } 

    return two(this.getDate()) + '/' + two(this.getMonth() + 1) + '/' + this.getFullYear(); 
}; 

Теперь вы можете получить ключ легко:

var dateKey = someRandomDate.getDateKey(); 

MDN documentation for Date objects.

+0

Это отлично работает. Я просто запускаю все через эту новую функцию getDateKey, и, похоже, все хорошо. Позвольте мне поэкспериментировать, удостоверьтесь, что я могу приспособить все к нему, и если так ... ну, это die antwoord (ответ). –

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