使用日期循环(查询)我的localStorage.JavaScript中日期对象的困难时期
Using dates to cycle through (query) my localStorage. Difficult times with the date object in JavaScript
我使用localStorage来存储基于日期的数据。我认为(我认为!)它相当优雅。
数据像这样输入:
localStorage.setItem(datakey, JSON.stringify(dataObject));
我把它弄出来,像这样
dataObject = JSON.parse(localStorage.getItem(datakey));
如您所见,datakey是主键。我用了一个格式化的日期。数据是DD/MM/YY格式,我得到它(感谢StackOverflow)像这样:
Date.prototype.getDateKey = function() {
function two(n) {
return (n < 10 ? '0' : '') + n;
}
return two(this.getDate()) + '/' + two(this.getMonth() + 1) + '/' + this.getFullYear();
};
var d = new Date();
var datakey = d.getDateKey();
所以现在我想做的是使用另一个变量来"搜索"localStorage并提取两个日期(今天和过去的一个点)之间的所有数据。我试过了:
function getData(timespan){
var period = timespan;
var start_date = d.setMonth(d.getMonth()-timespan);
var today_key = d.getDateKey();
var history_key = start_date.getDateKey();
}
to no avail
我想循环通过日期,一天一天,但start_date不是一个日期对象,由于某种原因,因此没有getDateKey()方法。我计划使用for循环从history_key循环到today_key,每次获取localStorage数据,这样:
dataObject = JSON.parse(localStorage.getItem(i));
,然后将结果粘贴到可以从中提取数据的数组中。
主要问题:如何通过日期循环并使它们进入i,所以我从localStorage获得数据。start_date不是一个对象(根据console和typeof),所以我有点卡住了。
很抱歉解释这么长,但如果我明确我要做什么,可能会更容易让人们看到这一切的意义,也许会告诉我,我做x或y很疯狂,或者像这样使用localStorage。
有谁对如何处理这个问题有什么想法吗?
Date.setMonth()
不返回Date
对象。实际上,它什么也不返回。你认为日期就像字符串一样,是不可变的。日期是可变的,所以…:
function getStartDate(timespan) {
var date = new Date();
date.setMonth(date.getMonth()-timespan);
return date;
}
var today = (new Date()).valueOf(); //milliseconds
function getNextDate(currentDate) {
//get the next day:
currentDate.setDate(currentDate.getDate()+1);
var finish = currentDate.valueOf() > today;
return finish ? null : currentDate;
}
var currentDate = getStartDate(1); //let's say, one month ago.
var dataObjects = [];
do {
var storedItem = JSON.parse(localStorage.getItem(currentDate.getDateKey()));
if (storedItem) dataObjects.push(storedItem);
} while (currentDate = getNextDate(currentDate));
就是这个意思。希望它对你有用。
编辑
基本上,我设置了一个currentDate
,一个由今天定义的日期和你通过getStartDate()
的时间跨度。然后存储代表今天的毫秒数。这样,getNextDate()
函数将检查增加的日期是否大于今天。如果是,则进程停止。
没有理由让getNextDate()
返回currentDate
。它是一个全局变量,此外,函数已经修改了它的值,而不是引用本身。我这样做是出于审美目的。我必须返回一些东西,并且,作为函数被称为getNextDate()
,它返回下一个日期是合乎逻辑的……除非那个日期比今天大,在这种情况下我返回null
。当我返回null
时,表达式
curentDate = getNextDate(currentDate)
等于null
(赋值是一个返回l值接收到的值的表达式,这就是为什么像a = b = c = 10;
这样的表达式有效),并且do ... while
循环结束。
顺便说一下,您发现的错误是因为我忘记将当前日期传递给getNextDate()
。现在应该可以工作了。
试一下,如果发现错误,告诉我。
- 比较从函数和生成的日期对象
- 如何获得一个只有时间的moment.js日期对象
- 使用moment.js获取时间分区的偏移日期对象
- 获取本地时间的JS日期,日期对象中没有时区详细信息
- 将某个时间格式转换为日期对象
- 正在使用日期字符串初始化javascript日期对象
- 在CouchDB Map函数中发出日期时-对日期对象调用的内容
- 如何将事件的日期放入fullcalendar中的日期对象中
- 为什么在JavaScript中可以从另一个日期对象中减去日期对象
- 理解日期对象接收参数时的getDay()方法
- JS日期对象setUTCMonth()将月份增加2
- 时间-日期对象JavaScript getUTCMilliseconds
- 将带有 AM/PM 的日期字符串转换为 javascript 日期对象
- Javascript 测试中的假日期对象
- 转换/格式化日期对象
- 如何在发布JavaScript日期对象时保留时区偏移量
- JS日期对象在某个范围内的百分比
- 无法从日期对象javascript获取日期和月份
- javascript日期对象未返回正确的日期
- Javascript日期对象-JSFiddle中的不同值