使用 Jquery UI Datepicker 重定向到 URL:根据所选日期更改 URL 值

Posted

技术标签:

【中文标题】使用 Jquery UI Datepicker 重定向到 URL:根据所选日期更改 URL 值【英文标题】:Using Jquery UI Datepicker to redirect to URL: Change URL value based on the selected date 【发布时间】:2021-02-19 22:34:16 【问题描述】:

这是我的第一个 *** 问题,所以请放轻松!

我有一个 jQuery UI Datepicker 字段,我想将其用作基本的“导航”设备,以直接跳转到特定于该日期的 Wordpress 帖子。在将近一年的时间里,共有 368 个帖子。

我可以成功地使用日期选择器重定向到基于日期字段的 url,例如:

domain.com/2020-11-07

但是,帖子本身不使用该 URL,它们有一个唯一的编号:

domain.com/365

有没有办法有条件地改变它?我目前正在使用 .htaccess 重定向来解决这个问题,但我想如果可能的话我应该避免这种情况?我宁愿让它从 datepicker 脚本直接工作。

一个复杂的问题是帖子 URL 不是严格按顺序排列的;有一些重复导致一些像 036、036B。我猜这排除了以一种聪明的方式执行此操作,并且意味着 368 个条件语句。不过,一旦我知道该怎么做,我就可以很容易地创建代码。这是我目前的基本重定向:

$("#datepicker")
.datepicker(
  dateFormat: "yy-mm-dd",
  onSelect: function(dateText) 
    $(this).change();
  
)

.change(function() 
  window.location.href = "/" + this.value;
);

感谢您的任何建议!

非常感谢!

【问题讨论】:

尚不清楚2020-11-07365 的关系。需要有某种逻辑关系。 如果您可以从 WP 查询帖子列表,我假设它们具有唯一 ID 和发布日期,您可以使用 onBeforeShow 执行检查并填充数据。 感谢您的意见。可惜两者没有逻辑关系,只需要对日期进行条件检查,返回对应的URL/slug 为了提供更多背景信息,每篇文章都是一幅画。一年来每天都有一幅画。然而,由于艺术家失去了编号,一些被复制,因此是 350 和 350B。这意味着该项目运行到 368 天,我们也失去了任何正确的顺序。我们记录了任何一天的绘画编号,我只需有条件地将 Datepicker 日期更改为相应的绘画编号。使用 php 我只是使用类似以下的东西: code 链接 code 【参考方案1】:

考虑以下示例。

$(function() 
  function getDayOfYear(n) 
    var s = new Date(n.getFullYear(), 0, 0);
    var d = (n - s) + ((s.getTimezoneOffset() - n.getTimezoneOffset()) * 60 * 1000);
    var oneDay = 1000 * 60 * 60 * 24;
    var day = "00" + Math.floor(d / oneDay);
    return day.substr(-3);
  

  var targetUrl;
  var exceptions = 
    "2020-02-06": "036B",
    "2020-10-10": "283B"
  ;

  $("#datepicker")
    .datepicker(
      dateFormat: "yy-mm-dd",
      onSelect: function(dateText) 
        var datePicked = $.datepicker.parseDate("yy-mm-dd", dateText);
        var dayPicked = getDayOfYear(datePicked);
        targetUrl = "/" + dayPicked;
        if (exceptions[dateText] != undefined) 
          targetUrl = "/" + exceptions[dateText];
        
        $(this).change();
      
    )
    .change(function() 
      alert("Redirect to " + targetUrl);
      //window.location.href = targetUrl;
    );
);
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<p>Date: <input type="text" id="datepicker"></p>

如果用户选择2020-10-09,他们将被重定向到/283,因为该日期是一年中的第 283 天。如果他们选择2020-02-02,他们将被重定向到/033getDayOfYear() 将使用填充格式化结果,"001""365" 并返回一个字符串。

你举了一个例子,艺术家在 2020 年 10 月 9 日复制了两幅画,所以如果用户选择 2020-10-10,这是一个例外。我创建了一个对象exceptions,其中日期文本作为键,值作为所需的特殊结果。

否则,我将创建一个包含当年所有日期文本和相应 ID 的对象。选择日期后,您可以重定向到该值。

var days = 
  "2020-01-01": "/001",
  "2020-01-02": "/002",
  ...
  "2020-02-06": "/036B",
  ...
  "2020-10-10": "/238B",
  ...
  "2020-12-30": "/365",
  "2020-12-31": "/366",
;

然后是这样的:

window.location.href = days[dateText];

这一切都取决于所选日期和正确 URL 之间的逻辑关联。

【讨论】:

哇!非常感谢您如此彻底地调查。我认为这应该做我需要的。然而,一个额外的复杂情况是,该项目于 2018 年 11 月 18 日开始。我将如何添加该开始日期偏移量? 另外,除了例外,这是否会考虑到额外的“B”日期并从该例外中恢复计数?再次感谢! @Twisty 如果项目于 2018 年 11 月 18 日开始,您需要将天数抵消该数量。那是 2018 年的第 322 天。所以 322 : 1,所以 01/01/2019 是 1 : 34 和 12/31/2019 大致是 365 : 393。制作 2020 年 11 月 10 日 315 : 708。这是与一些各种例外的关系吗?

以上是关于使用 Jquery UI Datepicker 重定向到 URL:根据所选日期更改 URL 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery-ui/datepicker 的内存泄漏

使用 jquery 验证和 jquery-ui datepicker

将 JQuery UI Datepicker 与来自 Jquery UI 主题的图标一起使用

jQuery UI datepicker - 如果使用 $('').datepicker('option', ),则加载时输入无效

jQuery ui datepicker 与 bootstrap datepicker 冲突

jQuery UI:DatePicker,只选择今天到过去的日期