【问题标题】:Check if pickadate.js datepicker has selected today not working?检查pickadate.js datepicker是否选择了今天不起作用?
【发布时间】:2023-03-24 20:00:02
【问题描述】:

我正在尝试检查此日期选择器 (pickadate.js) 是否已选择当前日期。这是我的代码:

var today = new Date();

var tomorrow = new Date();

tomorrow.setDate(today.getDate() + 1);

var nextyear = new Date();

nextyear.setFullYear(nextyear.getFullYear() + 1);

var pickupdatepicker = $("#car-rental-pickup-date").pickadate({
	editable: true,
    format: "mm/dd/yyyy",
    min: today,
    max: nextyear,
    today: "",
    close: "",
    clear: "",
    onSet: function(context) {
    
        var d = new Date(context.select);

        dnotime = new Date(d.toDateString());
        todaynotime =  new Date(today.toDateString());

        var currenthour = new Date().getHours();
        var hourp3 = currenthour + 13;

        console.log (dnotime);
        console.log (todaynotime);

        if (dnotime == todaynotime) {

            time.set({
                disable: [
                { from: [0,0], to: [hourp3,00] }
                ]
            });

            console.log ("today!");

        }else{

            console.log ("not today!");

        }
        
    }
});
<link rel="stylesheet" href="https://amsul.ca/pickadate.js/vendor/pickadate/lib/themes/default.date.css" id="theme_date">


<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://amsul.ca/pickadate.js/vendor/pickadate/lib/picker.js"></script>
<script src="https://amsul.ca/pickadate.js/vendor/pickadate/lib/picker.date.js"></script>
<input type="date" name="car-rental-pickup-date" id="car-rental-pickup-date" class="form-control tleft readonly" value="" placeholder="Select Pickup Date" required>

但是比较两个日期的 if 语句不起作用,但控制台说它们是相同的。是什么赋予了?有人可以检查一下并告诉我我做错了什么吗?

【问题讨论】:

  • 您无法比较日期对象,除非您先将它们转换为毫秒。 d.getTime() & today.getTime() if(d==today){//...} 但是你可以比较日期的每一部分,比如 if(today.getDate()==d.getDate() && today.getMonth()==d.getMonth( ) && today.getFullYear()==d.getFullYear()){//...}
  • 以上澄清-var dTime = d.getTime()var todayTime = today.getTime()然后if(dTime==todayTime){/...}
  • dnotime = new Date(d.toDateString()); 太糟糕了,就做d.setHours(0,0,0,0)

标签: javascript jquery date datepicker pickadate


【解决方案1】:

在您的代码中:

if (dnotime == todaynotime) {

比较两个 Date 对象,所以它总是假的。先强制编号:

if (+dnotime == +todaynotime) {

但是,您可以使它更简单,因为context.select 返回所选日期的本地开始时间值,因此您可以这样做:

if (context.select == new Date().setHours(0,0,0,0))

并简化前面的代码。这是修改后的原始代码:

var today = new Date();
// Set to start of day
today.setHours(0,0,0,0);
// Copy today as root for tomorrow
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1);
// And for next year
var nextyear = new Date(today);
nextyear.setFullYear(nextyear.getFullYear() + 1);

var pickupdatepicker = $("#car-rental-pickup-date").pickadate({
	editable: true,
    format: "mm/dd/yyyy",
    min: today,
    max: nextyear,
    today: "",
    close: "",
    clear: "",
    onSet: function(context) {
    
        // Could keep value as number, but OK as Date too
        var d = new Date(context.select);

        // This is unnecessary
        // dnotime = new Date(d.toDateString());
        // todaynotime =  new Date(today.toDateString());

        // Not relevant to issue
        // var currenthour = new Date().getHours();
        // var hourp3 = currenthour + 13;

        // Compare time values
        // Could also do: if (+d == + today) {...}
        if (d.getTime() == today.getTime()) {
        /* Not relevant
            time.set({
                disable: [
                { from: [0,0], to: [hourp3,00] }
                ]
            });
        */
            console.log ("today!");

        } else {
            console.log ("not today!");
        }
    }
});
<link rel="stylesheet" href="https://amsul.ca/pickadate.js/vendor/pickadate/lib/themes/default.date.css" id="theme_date">


<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://amsul.ca/pickadate.js/vendor/pickadate/lib/picker.js"></script>
<script src="https://amsul.ca/pickadate.js/vendor/pickadate/lib/picker.date.js"></script>
<input type="date" name="car-rental-pickup-date" id="car-rental-pickup-date" class="form-control tleft readonly" value="" placeholder="Select Pickup Date" required>

【讨论】:

  • 我不太了解如何实现 context.select - 你能给我一个更详细的例子吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 2010-11-07
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多