尝试将开始和结束日期与 mm/yyyy 格式进行比较

Posted

技术标签:

【中文标题】尝试将开始和结束日期与 mm/yyyy 格式进行比较【英文标题】:Try to compare start & end date with mm/yyyy format 【发布时间】:2012-02-25 15:34:08 【问题描述】:

我在其他用户的帮助下从这里写了这篇文章,但没有工作。

我有两个字段,来自此处的 maskedinput > http://digitalbush.com/projects/masked-input-plugin/ 格式为:mm/yyyy

我想比较结束日期​​大于开始日期,如果不是,则禁用提交按钮。但我一直想要用户,他们可以在不通知开始或结束日期的情况下注册表格。 所以我只想比较这两个字段,当它们里面有 7 个字符时, 功能必须在这个 > yyyymm 中完成,因为使用 mmyyyy 他们没有机会正常工作。

你有什么想法可以推荐给我吗?

在此先感谢您的帮助;)

html

<form class="blockdate">
    <input name="stardate"type="text" class="date"/>
    <input name="enddate" type="text" />
    <input name="submit" type="submit" class="date"/>
</form>

<div id="msg"></div>

JS

var compareA = getElementsByName("startdate");
var comparen = getElementsByName("enddate");
function compare() 
// Assumes the format mm/yyyy (not mmyyyy, which your example values seem to be in)
var compareA, compareB;
compareA = dateA.substring(3) + dateA.substring(0, 2);
compareB = dateB.substring(3) + dateB.substring(0, 2);
if (compareA > compareB) 
       $('#msg').html('Check Stard & Endate.');
        $(".submit").prop("disabled",true);





    jQuery(function($) 

         $('.blockdate').submit(function() 
          return compare;
       );

        $(".date").change(function()
          if(datevalue2.length == 7) 
            compare;
           else 
            clean();
          
      );
    );

【问题讨论】:

其中哪一部分不起作用?有什么用吗?您收到错误消息吗?还是什么都没发生? 你好DOK,什么都没有发生,我对JS不是很熟悉 【参考方案1】:

首先,您的enddate 没有分配给它的date 类。所以你永远不会抓住那个价值。其次,如果您需要颠倒月份年份的顺序,则只需交换子字符串调用:

//         month                   year
compareA = dateA.substring(0, 2) + dateA.substring(3);

//         year                   month
compareA = dateA.substring(3) + dateA.substring(0,2);

最后你应该使用Date 对象来获取一个unix时间戳,它是一个给定日期的真正整数版本,你可以用来比较:

function compare(start, end) 

  var start, 
    end,
    toDate = function(datestr)
        return new Date(parseInt(datestr.substring(3)), parseInt(datestr.substring(0, 2)));
    ;

    if(toDate(start).getTime() > toDate(end).getTime()) 
        $('#msg').html('Check Stard & Endate.');
        $(".submit").prop("disabled",true);
        return false;
    

    return true;

【讨论】:

【参考方案2】:

正如 prodigitalson 回答的那样,您的代码应该是这样的

HTML

<form class="blockdate">
<input name="stardate"type="text" id="dateA" class="date"/>
<input name="enddate" type="text" id="dateB" class="date"/>
<input name="submit" type="submit" value="submit" id="btnOk"/>
</form>
<div id="msg"></div>

JS

function compare(start, end) 

    var start, end, toDate = function(datestr) 
        return new Date(parseInt(datestr.substring(3)), parseInt(datestr.substring(0, 2)));
    ;

    if (toDate(start).getTime() > toDate(end).getTime()) 
        $('#msg').html('Check Stard & Endate.');
        $(".submit").prop("disabled", true);
        return false;
    

    return true;


function clean() 
    $('#msg').html('');
    $("#btnOk").removeAttr("disabled");


$(document).ready(function() 

    $('#btnOk').click(function(e) 
        if (!compare()) e.preventDefault();
        return true;
    );

    $(".date").bind("keyup", "change", function() 

        var startDate = $("#dateA").val();
        var endDate = $("#dateB").val();

        if (startDate.length == 7 && endDate.length == 7) compare(startDate, endDate);
        else clean();
    );

);

【讨论】:

以上是关于尝试将开始和结束日期与 mm/yyyy 格式进行比较的主要内容,如果未能解决你的问题,请参考以下文章

将日期格式更改为 yyyy-mm-dd

角度材料2、将datepicker日期格式“MM/DD/YYYY”改为“DD/MM/YYYY”的奇怪行为

自适应卡片日期格式 dd/MM/yyyy

如何将日期转换为“dd/MM/yyyy”格式?

将 dd/mm/yyyy 格式的字符串转换为日期时间 [重复]

Pandas 将日期字符串从格式 mm/d/yyyy 和 mm/dd/yyyy 转换为 dd.mm.yyyy