gpt4 book ai didi

javascript - 如果 URL 中的日期晚于当月则重定向

转载 作者:行者123 更新时间:2023-11-30 10:59:24 25 4
gpt4 key购买 nike

我正在尝试通过读取当前页面的 URL 并查找关键字来显示当前日期是当前日期还是过去日期的页面。例如,

示例网址:http://www.website.com/blog/2019/october.html

我想编写一个脚本,从页面的 URL 中查找月份(“10 月”)和年份(2019 年),并确定它是当前的还是过去的。如果是在未来,它将把他们重定向到一个错误页面,当前或过去会让他们通过。这样做的目的是我预发布了我不希望用户在它成为当前内容之前能够访问的页面。

我目前正在使用 window.location.href.includes 在 URL 中查找值,然后使用循环与数组进行比较以返回月份和年份数字。到目前为止我的代码:

// Sample URL: http://www.website.com/blog/2019/october.html

var monthName = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
var monthNum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

for (i = 0; i < monthName.length; i++) {
if (window.location.href.includes(monthName[i]) > 0) {
var pageMonth = (monthNum[i]);
}
else {
}
}

这将给我一个结果 10。然后我打算对年份做同样的事情,然后再做一个将它们组合成一个日期的语句,然后使用另一个语句来确定那个日期<= 当前日期。有没有更好的方法来执行此操作?

这个方法一团糟,似乎我可能遗漏了一些使它更容易实现的东西。


更新:感谢您的所有回复。我已经完成了我的代码,这仍然是可取的,因为它不依赖于 URL 的结构,相反它只会搜索所有内容,以防我需要移动文件或在其他地方进行这项工作。我认为它肯定需要一些清理(尤其是两位数的月份部分),但我想在这里发布它。

var d = new Date();
var monthTwoDigit = ("0" + (d.getMonth() + 1)).slice(-2);
var monthName = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
var monthNum = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];

for (i = 00; i < monthName.length; i++) {
if (window.location.href.includes(monthName[i]) > 0) {
var pageMonth = monthNum[i];
}
else {
}
}

for (i = 2019; i < 3000; i++) {
if (window.location.href.includes(i) > 0) {
var pageYear = (i);
}
else {
}
}

var urlDate = "" + pageYear + pageMonth;
var actualDate = "" + d.getFullYear() + monthTwoDigit;

if (urlDate > actualDate) {
window.location.replace("http://www.website.com/error.html");
}
else {
document.write("SAFE");
}

最佳答案

是的,可以通过多种方式改进此代码。此外,为了比较日期,我们将使用 Date 实例,这是处理日期和时间的内置 JS 方法。

var monthName = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];

首先,我们不需要列出月份数字,因为我们可以使用上面数组的数组索引(从 0 到 11),这对我们将来有好处。

现在让我们从 URL 中解析月份和年份。我们将使用正则表达式来编写更少的代码:

const matches = window.location.href.match(/http:\/\/www.website.com\/blog\/([0-9]{4})\/([a-z]{3,})\.html/);

// String.prototype.match, which we used can give us null value if URL doesn't match our pattern, so we need to check it first.
if (matches !== null) {
const year = parseInt(matches[0]); // the first match of regular expression is the year
const monthIndex = monthName.indexOf(matches[1]); // this should give us the number of month, from 0 to 11
if (monthIndex !== -1) { // but we must continue only if month name in the URL is correct.
const date = new Date(); // Get current date.

// Now let's extract month and year from the current date.
// date.getMonth() returns the current number of month from 0 to 11, just what we need.
// date.getFullYear() obviously returns the current year number.
// Let's use these methods and compare current date values with ones we've got from the URL:

if (date.getFullYear() > year || (date.getFullYear() === year && date.getMonth() > monthIndex)) {
// we're in the future, let's redirect:
window.location.href = 'https://website.com/error.html';
}
}
}

关于javascript - 如果 URL 中的日期晚于当月则重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58534197/

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