我对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+ "");
}
答案 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 **
}