【问题标题】:Add a day to departure javascript添加出发日期 javascript
【发布时间】:2018-05-31 09:27:07
【问题描述】:

请看下面的javascript代码:

// Default calendar namespaces
    var dateFormat = "<span class='day'>d</span> <span class='month'>M</span> <span class='year'>yy</span>",
        dateArrival = '#dateArrival input',
        dateDeparture = '#dateDeparture input',
        dateArrivalVal = '#dateArrival .date-value',
        dateDepartureVal = '#dateDeparture .date-value';

    // Show arrival calendar
    $(dateArrival).datepicker({
        minDate: 'D',
        dateFormat: dateFormat,
        // get value on selected date for departure
        onSelect: function (txt, inst) {
            $(dateDepartureVal).html(txt);
            $(dateArrivalVal).html($(dateArrival).val());
        },
        onClose: function (selectedDate) {
            $(dateDeparture).datepicker("option", "minDate", selectedDate);
        }
    });

    // Show departure calendar
    $(dateDeparture).datepicker({
        minDate: 'D+1',
        dateFormat: dateFormat,
        // get value on selected date for return
        onSelect: function (txt, inst) {
            $(dateDepartureVal).html(txt);
            $(dateDepartureVal).html($(dateDeparture).val());
        }
    });

    // set current date
    $('.datepicker').datepicker('setDate', 'today');
    // get current value from departure 
    $(dateArrivalVal).html($(dateArrival).val());
    // get current value from return
    $(dateDepartureVal).html($(dateDeparture).val());

如您所见,它是一个预订小部件,将当天显示为入住,第二天显示为退房。但是,当客户选择另一天入住时,退房设置为同一天。我想要做的是,如果选择 dateArrival 为 6 月 7 日,dateDeparture 会自动显示 6 月 8 日(即 dateArrival + 1 天),而不是显示相同的日期(6 月 7 日)。怎么可能做到这一点?

非常感谢!

【问题讨论】:

  • 您确定要这样做吗?人们有时会不合理地填写表格并在设置到达日期之前设置出发日期,并且更改他们可能输入的日期并不一定是个好主意。如果现有日期早于到达日期,您应该只自动更改日期
  • 我完全理解你的意思,@vogomatix。有没有办法只在先设置到达日期时才更改出发日期?
  • @RobG: #dateArrival input 选择 #dateArrival 内的所有输入,例如#dateArrival 可能是一个 div 包含多个 input 元素。

标签: javascript date calendar


【解决方案1】:

你可以:

  1. 在到达日期注册一个更改事件,该事件设置在 D+1 检查 jQuery .change() 出发
  2. 在出发日期注册一个更改事件,这将删除以前的处理程序jQuery .off

但这里的技巧是 datepicker 中没有任何方法可以帮助您将 +1 天设置为任意日期,因此您必须直接操作格式化字符串。 我添加了 3 行来生成 +1 天字符串,第四行使用 datepicker 方法设置 dateDeparture。它已经过测试,因此请检查它是否适合您

// Show arrival calendar
$(dateArrival).datepicker({
    minDate: 'D',
    dateFormat: dateFormat,
    // get value on selected date for departure
    onSelect: function (txt, inst) {
        $(dateDepartureVal).html(txt);
        $(dateArrivalVal).html($(dateArrival).val());
        // ADDED THESE FIVE LINES
        var d = new Date((+inst.currentMonth+1) + '/' + inst.currentDay + '/' + inst.currentYear)
        var dpo = new Date(d.getTime() + 24*60*60*1000)
        var str = "<span class=day>"+dpo.getDate()+"</span> <span class=month>"+(dpo.toDateString().split(' ')[1])+"</span> <span class=year>"+dpo.getFullYear()+"</span>"
        $(dateDeparture).datepicker('setDate', str);
        $(dateDepartureVal).html(str);
    }
    // REMOVED USELESS ONCLOSE, SINCE UI IS CLOSED ON SELECT
});

【讨论】:

  • 您能指定一个示例代码吗?我对javascript不太了解。谢谢!
  • 谢谢你,@lucchi。由于某种原因,代码不起作用(当设置另一个到达日期时,出发日期设置为同一天,而不是后天——这是我想要做的。忘记“如果”部分,如果之前已经设置了 dateDeparture 并不重要)。如果需要,请查看 proyectohales.com/catedral。你能找出原因吗?谢谢!
  • @Alex 实际上,当您选择一个退房日期,然后打开入住日历它预设为 D+1,这与您想要的相反,而且这个日期还没有过去到.日期值。让我们在编辑中解决这个问题。
  • 谢谢!这完美地工作。只有一个建议:onclose 并非无用,因为它会阻止用户选择到达之前的日期。但是感谢您的代码!
  • @Alex,作为建议,您应该真正了解用户体验,并设计为您的用户服务的自动化系统,而不是验证他们的数据的需要。绝对不是为了阻止他们在某处输入有效输入,只是因为他们确实在其他地方输入了另一个有效输入。现在您的 UI 不需要更多代码,只需考虑一下您的 UX。
猜你喜欢
  • 2023-03-08
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2012-07-05
相关资源
最近更新 更多