【发布时间】:2021-12-14 08:03:31
【问题描述】:
我的网站上有用于雪花的 Javascript,我在其中存储了一个 cookie,以记住用户的雪花开关设置。
我正在尝试做的是,将 cookie 设置为每年 1 月 6 日(第 12 晚之后)到期,并且雪只在每年 12 月 1 日至 1 月 5 日之间有效。
因此,我正在尝试根据用户是否在今年 12 月点击页面,将 cookie 的过期日期设置为明年或今年的 1 月 6 日(我希望以后每年都可以使用,无需编辑)或在明年 1 月 5 日之前。
我在页面中添加了警报,以在单击切换按钮后显示 expiryDate 的值,据我所知,UTC 日期结果很好,但是当我在浏览器控制台中查看到期日期时,它从我单击按钮开始始终是 1 周,因此 expiryDate 设置为 + 1 周,但未设置为明年 1 月 6 日,即使 expiryDate 的值在警报时看起来不错。
为了确定到期年份是今年还是明年,我正在检查月份值 - 如果它不为零(即一月),那么到期年份是明年,否则是今年.
function toggleSnow() {
const dateNow = new Date();
let year = dateNow.getYear();
let month = dateNow.getMonth();
var expiryYear;
if (month == 0) {
expiryYear = year + 1900;
} else {
expiryYear = year + 1901;
}
const dayOnExpiry = new Date("Jan 06, " + expiryYear + " 12:00:00");
var expiryDate = dayOnExpiry.toUTCString();
var toggleOnOff = document.getElementById("snowContainer");
var newState = toggleOnOff.nextElementSibling;
if (toggleOnOff.classList.toggle("active")) {
document.cookie = "Snow=No; Expires=" + expiryDate + "; Path=/; Domain=xxx; Secure; SameSite=Strict; Priority=High";
} else {
document.cookie = "Snow=Yes; Expires=" + expiryDate + "; Path=/; Domain=xxx; Secure; SameSite=Strict; Priority=High";
}
}
为什么 cookie 的到期日期总是 + 1 周而不是 1 月 6 日,或者我没有做错任何事情,而是浏览器的问题?
【问题讨论】:
-
我只是在 Edge 而不是 Safari(Mac 用户)中尝试过,在 Edge 中,到期日期设置正确,所以有没有办法强制它到所需的日期,或者这只是浏览器具体的安全政策?
-
Jan 06, YYYY 12:00:00不是 cookie 支持的标准日期格式之一。有关标准格式,请参阅链接的问题。 -
链接的票证没有回答我的问题。我已经在我的代码中使用了 toUTCString 格式。
-
您是否尝试过
console.log(expiryDate)以确保它包含您所期望的内容? -
是的,我得到了预期的结果。明年1月6日。给出结果 2022 年 1 月 6 日星期四 12:00:00 GMT
标签: javascript cookies