用jquery比较日期和字符串

时间:2016-11-02 08:00:35

标签: javascript jquery

我正在尝试比较今天的日期和字符串中的日期。它们都有一个字符串类型。为什么我会“不!” ?

jQuery(document).ready(function () {
    Date.prototype.today = function () { 
        return ((this.getDate() < 10) ? "0" : "") + this.getDate() + "/" +(((this.getMonth() + 1) < 10) ? "0" : "") + (this.getMonth() + 1) + "/" + this.getFullYear();
    }

    datetodayvar = new Date().today();
    deadlinadate = '16/10/2016';

    if (String(datetodayvar) >= String(deadlinadate)) {
        alert("yes!");          
    } else {
        alert("no!");
    } 
});

4 个答案:

答案 0 :(得分:4)

将它们都转换为Date个对象而不是字符串。

jQuery(document).ready(function () {
    Date.prototype.today = function () { 
        return ((this.getDate() < 10)?"0":"") + this.getDate() +"/"+(((this.getMonth()+1) < 10)?"0":"") + (this.getMonth()+1) +"/"+ this.getFullYear();
    }

    datetodayvar = new Date().today();
    deadlinadate = '02/11/2016';

    if(new Date(datetodayvar) >= new Date(deadlinadate)) {
        alert("yes!");          
    } else {
        alert("no!");
    } });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

如果您有来自3个不同输入字段(下拉列表或其他内容)的“日期字符串”,则不输入字符串,但请按如下方式设置日期格式。

var year = 2015;
var month = 2-1; // February
var day = 27;
var now = new Date(year, month, day);

这样,如果你需要使用a - a,你不必担心日期符号,本地化。或/或其他内容。

还要记住月份,总是-1,因为它开始计为0(januari为0,12月为11。

另外,请注意日光节省时间。通过减去一小时,你可能会对新鲜的日期对象产生影响。

下面的代码段包含了我在“简单”比较机制中使用的所有内容。

jQuery(document).ready(function () {
        var str = '';
        for(var c=1;c<32;c++) {
            str += '<option value="'+c+'">'+c+'</option>';
        }
        $('#day').html(str);
        var str = '';
        for(var c=0;c<12;c++) {
            str += '<option value="'+c+'">'+(c+1)+'</option>';
        }
        $('#month').html(str);
        var str = '';
        for(var c=parseInt(new Date().getFullYear());c>1990;c--) {
            str += '<option value="'+c+'">'+c+'</option>';
        }
        $('#year').html(str);
        $('#istodaycheck').on('click',function() {
            var day = $('#day').get(0);
            var month = $('#month').get(0);
            var year = $('#year').get(0);
            
            var date = new Date(
                         year.options[year.selectedIndex].value,
                         month.options[month.selectedIndex].value,
                         day.options[day.selectedIndex].value);
            date.correctDst();
            
            $('#output').text(date.isToday() ? 'yes' : 'no');
        });
     });

/**
 * Retrieve standard timezome offset
 */ 
Date.prototype.stdTimezoneOffset = function() {
   var jan = new Date(this.getFullYear(), 0, 1);
   var jul = new Date(this.getFullYear(), 6, 1);
   return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}
/**
 * Checks if date is in day lights savings
 */
Date.prototype.dst = function() {
   return this.getTimezoneOffset() < this.stdTimezoneOffset();
}
/**
 * corrects the unwanted substraction of an hour on fresh dates.
 */ 
Date.prototype.correctDst = function() {
    if(!this.dst()) {  
         this.setHours(this.getHours()+1);
     }
}
/**
 *  Returns a date instance without time components.
 */
Date.prototype.justDate = function() {
     var date = new Date(this.getFullYear(),this.getMonth(),this.getDate());
     date.correctDst();
     return date;
}
/**
 * Tests if given date is today.
 */
Date.prototype.isToday = function() {
    // strip possible time part.
    var testdate = this.justDate();          
    var datetodayvar = new Date().justDate();
    return datetodayvar.getTime() == testdate.getTime()
}
     
#output {
  background-color: #eee;
  border: 1px solid pink;
  display: block;
  width: 100%;
  height:200px;
  text-align: center;
  font-size:121pt;
  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="day">
</select>
<select id="month">
</select>
<select id="year">
</select>
<button id="istodaycheck">Is this date today?</button>
<div id="output">
</div>

答案 1 :(得分:2)

比较日期时,始终使用Date个对象。需要注意的是,在创建对象时,提供的日期字符串必须是d/m/yd-m-y格式。另请注意,今天不是16/10/2016

jQuery(document).ready(function() {
  var datetodayvar = new Date();
  var deadlinadate = new Date('2/11/2016');

  if (datetodayvar >= deadlinadate) {
    console.log("yes!");
  } else {
    console.log("no!");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:1)

首先,当你这样做时,你错误地将两个字符串比作数字,

  

if(String(datetodayvar)&gt; = String(deadlinadate)){}

因为如果你想比较你需要的字符串

if(String(datetodayvar).equals(String(deadlinadate))){...

否则你比较内存位置而不是实际值。 阅读更多What is the difference between == vs equals() in Java?

此代码将按字母顺序检查两个字符串对象是否大于或等于彼此,而不是根据您对日期比较的实际要求。功能代码如下:

&#13;
&#13;
jQuery(document).ready(function () {
    Date.prototype.today = function () { 
        return ((this.getDate() < 10)?"0":"") + this.getDate() +"/"+(((this.getMonth()+1) < 10)?"0":"") + (this.getMonth()+1) +"/"+ this.getFullYear();
    }

    datetodayvar = new Date().today();
    deadlinadate = '02/11/2016';

    if(new Date(datetodayvar) >= new Date(deadlinadate)) {
        console.log("yes!");          
    } else {
        console.log("no!");
    } });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

假设日期格式为 dd / mm / yyyy 截止日期>=今天

var ar = '02/11/2016'.split('/').map(Number);
var valid = new Date(ar[2],ar[1]-1,ar[0]) >= new Date().setHours(0,0,0,0);

console.log(valid);