gpt4 book ai didi

Javascript 添加迄今为止的天数、周数或月数

转载 作者:行者123 更新时间:2023-11-28 03:19:36 26 4
gpt4 key购买 nike

我有一段代码可以清理浏览器本地存储。
我想要的是根据设置的参数删除一些键。
一个例子:

这应该做的是在每个月的第一天删除本地存储。另一个例子是当你填写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 参数是可能的:

  • 'y' - 年
  • 'm' - 月
  • 'w' - 周
  • 'd' - 天
  • 'h' - 小时
  • 'n' - 分钟
  • 's' - 秒
  • 'ms' - 毫秒

使用示例

//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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com