比较JavaScript中的日期

时间:2014-01-06 22:10:58

标签: javascript datepicker

我对JavaScript很陌生,我经常做实验以适应它。我试图编写JavaScript函数来确定日期是来自过去还是未来。它使用了datepicker表单,并且if语句不能正常工作,因为无论我选择哪个日期,它都会显示“来自未来的日期”。

function selectDate()
{
    var d = new Date();
    var day = d.getDate();
    var month = (d.getMonth() +1);
    var year = d.getFullYear();
    var x=document.getElementById("dateSelection");

if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

if (d > x)
{
    document.write("Date from the past" + "<br>");
    document.write("Today is " +day+ "/" +month+ "/" +year+ "");
}
else (d < x)
{
    document.write("Date from the future" + "<br>");
    document.write("Today is " +day+ "/" +month+ "/" +year+ "");
}

2 个答案:

答案 0 :(得分:1)

您正在将字符串x与日期对象d进行比较,但这无法完成。

为了比较日期,最好比较Date个对象,你可以这样做:

function selectDate()
{
    var d = new Date();
    var day = d.getDate();
    var month = (d.getMonth() +1);
    var year = d.getFullYear();
    var x = document.getElementById("dateSelection"); //This is a STRING, not a Date

    var dateParts = x.split("/");   //Will split in 3 parts: day, month and year
    var xday = dateParts[0];
    var xmonth = dateParts[1];
    var xyear = dateParts[2];

    //Now create date object of the selected one
    var xd = new Date(xyear, parseInt(xmonth, 10) -1, xday);


    if (d > xd)  //Now we compare 2 date objects
    {
      document.write("Date from the past" + "<br>");
      document.write("Today is " +day+ "/" +month+ "/" +year+ "");
    }
    else (d < xd)
    { 
      document.write("Date from the future" + "<br>");
      document.write("Today is " +day+ "/" +month+ "/" +year+ "");
    }
}

希望这会有所帮助。干杯

答案 1 :(得分:0)

最简单的方法是使用标准<>运算符进行简单的Date对象比较。但是有一些技巧。 。

首先,初始化您的&#34;当前日期&#34;:

var d = new Date();

问题在于,实际上是当前日期/时间,而不仅仅是当前日期,因此输入的任何日期等于今天的日期将会丢失错误&#34;小于&#34 ; (除非你在完全午夜检查;))。所以,你需要&#34;归零&#34; d值中的时间值:

d.setHours(0, 0, 0, 0);

现在,您可以从用户输入创建一个Date对象:

var x = new Date(document.getElementById("dateSelection"));

因为输入是日期字符串,(1)Date构造函数知道如何处理格式化的日期值,所以您不需要对单个月/日/年进行任何更改值,和(2)字符串输入中没有时间元素,因此您不必担心将其归零,就像使用当前日期一样。

注1:您需要了解本地日期格式。 。 。 Date构造函数确实识别出&#34; mm / dd / yyyy&#34;格式,作为输入,但会被&#34; dd / mm / yyyy&#34;混淆。格式。如果你必须处理这种格式,那么你可能需要做一些额外的处理。

注意2:你应该在这里做一些检查,以确保你收到的值是一个有效格式化的日期字符串,但这应该发生在你的代码之前的早期代码中曾试图处理这个价值。

一旦你获得了两个Date个对象,这只是一个简单的比较

if (d > x) {
    // ** the user-entered date is in the past **
}
else if (d < x) {
    // ** the user-entered date is in the future **
}
else {
    // ** the user-entered date is the current date **
}
相关问题