作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一段代码可以清理浏览器本地存储。
我想要的是根据设置的参数删除一些键。
一个例子:
这应该做的是在每个月的第一天删除本地存储。另一个例子是当你填写5、2、周时。然后它应该每两周的第五天删除本地存储。
现在的主要问题是将不同的时期添加到今天的日期中,以便计算需要完成此操作的时间。我一直对此感到困惑并尝试了一些事情(如你所见)但没有结果......
有人愿意帮助我吗?
谢谢!
代码如下:
function cleanLocalStorage() {
var today = makeDate(todayDate()),
deleteoption = localStorage.getItem("historydeleteoption"),
lasthistoryclean = makeDate(localStorage.getItem("lasthistoryclean"));
if (deleteoption == "days") {
for (key in localStorage) {
if (makeDate(key) < today.subtractDays(getHistoryRetain())) // days to keep data excluding today
delete localStorage[key];
}
} else if (deleteoption == "period") {
var historyretain = localStorage.getItem("historyretain"),
historyresetday = localStorage.getItem("historyresetday"),
historyresetperiod = localStorage.getItem("historyresetperiod"),
historyresetperiodunit = localStorage.getItem("historyresetperiodunit"),
cleaningday = "";
if (historyresetperiodunit == "days") { ?
// ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
} else if (historyresetperiodunit == "weeks") { ?
// ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
var cleaningday = lasthistoryclean + (historyresetperiod * 7);
} else if (historyresetperiodunit == "months") { ?
// ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
var cleaningday = new Date(lasthistoryclean.setMonth(lasthistoryclean.getMonth() + historyresetperiod));
}
}
localStorage.setItem("lasthistoryclean", todayDate());
}
function todayDate() {
var date = new Date();
var dd = ('0' + date.getDate()).slice(-2),
mm = ('0' + (date.getMonth() + 1)).slice(-2), //jan is 0
yyyy = date.getFullYear();
return dd + "-" + mm + "-" + yyyy;
}
function makeDate(date) {
var parts = date.split("-");
return new Date(parts[2], parts[1] - 1, parts[0]);
}
<p>
<input type="radio" name="historydeleteoption" id="historydeleteoptiondays" value="days" onchange="greyOutHistoryDeleteOption()" checked="checked">
<label for="historydeleteoptiondays" id="historydeleteoptiondayslabel">Max days to keep history:
<input type="number" name="historyretain" id="historyretain" value="30" min="0" max="999" style="width: 70px; margin: 2px 0;"><br>
</label>
<input type="radio" name="historydeleteoption" id="historydeleteoptionperiod" value="period" onchange="greyOutHistoryDeleteOption()">
<label for="historydeleteoptionperiod" id="historydeleteoptionperiodlabel">Reset history on day
<input type="number" name="historyresetday" id="historyresetday" value="1" min="1" max="31" style="width: 70px; margin: 2px 0;"> of every
<input type="number" name="historyresetperiod" id="historyresetperiod" value="4" min="1" style="width: 70px; margin: 2px 0;">
<select name="historyresetperiodunit" id="historyresetperiodunit" onchange="maxValuesDeleteOption()" style="margin: 2px 0;">
<option value="days">days</option>
<option value="weeks">weeks</option>
<option value="months">months</option>
</select>
</label>
</p>
最佳答案
我创建了这个紧凑的函数:
function DateAdd(dfrom,anz,sel){
var df = (dfrom || dfrom === 0) ? (typeof dfrom == "string" ? dfrom.replace(/(\d{1,2})\.(\d{1,2})\./,'$2/$1/') : dfrom) : "";
df = df instanceof Date ? new Date(df-0) : (df === "" ? new Date() : new Date(df));
var pj = {y:[1,"FullYear"],m:[1,"Month"],w:[7,"Date"],d:[1,"Date"],h:[3600000],n:[60000],s:[1000],ms:[1]};
var s=pj[sel] || [1];
var s1 = s[1] || "Time";
df["set"+s1](df["get"+s1]() + parseInt(anz||0,10) * s[0]);
return df;
}
anz 参数也允许使用负数。
这些值对于 sel 参数是可能的:
使用示例
//Add 3 Days to current Date
var date = DateAdd(new Date, 3, 'd');
//2 weeks after 2019-03-01
var date = DateAdd('2019-03-01', 2, 'w');
//Fri Mar 15 2019
//6 month after 1.3.2019
var date = DateAdd('1.3.2019', 6, 'm');
//Sun Sep 01 2019
关于Javascript 添加迄今为止的天数、周数或月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59287300/
我在将一列转换为日期时遇到一些问题。 我希望将'01/02/98'(日、月、年)转换为'1998-02-01'(年、月、日). 以及如何将 '98' 转换为 1998。 最佳答案 I want thi
我正在从旧系统转换许多晦涩的日期格式。日期作为字符串解包/处理并转换为 ISO 8601 格式。 这个特定的函数尝试将 YYMMDD0F 转换为 YYYYMMDD ——函数名称说明了一切。从 2000
我是一名优秀的程序员,十分优秀!