Javascript 如何检查日期是否在接下来的7天内

Javascript 如何检查日期是否在接下来的7天内,javascript,asp.net,Javascript,Asp.net,我正在母版页上加载serverDateTime并在所有页面中访问该变量,并将serverDateTime与txtDate.value进行比较。如何验证约会只能在从当前日期算起的未来七天内固定 我正在使用此代码,但仍然无法工作 function validateDate() { serverDateTime="2012-11-23 17:06:46"; txtDate.value="30-Nov-2012" if (how i check h

我正在母版页上加载serverDateTime并在所有页面中访问该变量,并将serverDateTime与txtDate.value进行比较。如何验证约会只能在从当前日期算起的未来七天内固定

我正在使用此代码,但仍然无法工作

function validateDate() {               
    serverDateTime="2012-11-23 17:06:46";
    txtDate.value="30-Nov-2012"

    if (how i check here){
        alert("Appointment can be fixed for next seven days only from current day.");                       
        return false;
    }else{
        return true;
    }
}
这应该起作用:

    function validateDate()
            {           
                var dateDifference;
                pickedDate = Date.parse(txtDate.value.replace(/-/g, " "));
                todaysDate = new Date(serverDateTime);
                todaysDate.setHours(0, 0, 0, 0);
                dateDifference = Math.abs(Number(todaysDate) - pickedDate);
                //7 Days=604800000ms
                if (dateDifference > 604800000)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }       
//获取下周的日期值。
var today=新日期(serverDateTime);
var nextWeek=Date.parse(新日期(today.getFullYear(),today.getMonth(),today.getDate()+7));
//如果nextWeek小于(早于)输入日期的值,则发出警报。。。
if(nextWeek
.

if(serverDateTime.AddDays(7)


这只是为了指导你。您可以

在比较日期之前,它们必须是日期。。。 在您的示例中,它们都是字符串,请尝试以下操作:

//Set 1 day in milliseconds
var one_day=1000*60*60*24;
var serverDateTime= new Date("2012-11-23 17:06:46");
var newDate = new Date("30-Nov-2012"); //replace with txtDate.value

//Calculate difference btw the two dates, and convert to days
var diff = Math.ceil((newDate.getTime() - serverDateTime.getTime())/one_day);
if(diff >= 7)
{
    alert("7 days");   
}
else
{
    alert("Not up to 7 days");
}
​
尝试此操作并更改txtDate.value的值。 我还建议您对格式进行额外验证,以便正确理解日期。 查看javascript中日期/时间的所有详细信息

编辑

我在Chrome(v23.xxx)控制台中尝试了这一点:

function validateDate() {  
  var one_day=1000*60*60*24; 
  serverDateTime="2012-11-23 17:06:46";
  txtDate.value="30-Nov-2012"

  var _dtSvr = Date.parse(serverDateTime);
  var _dtTxt = Date.parse(txtDate.value);

  if (((_dtTxt - _dtSvr)/one_day) > 7){
    alert("Appointment can be fixed for next seven days only from current day.");                       
    return false;
  }else{
    return true;
  }
}
然后我试了一下:

function validateDate(serverDateTime, txtDate)
        {           
            var dateDifference;
            pickedDate = Date.parse(txtDate.replace(/-/g, " "));
            todaysDate = new Date(serverDateTime);
            todaysDate.setHours(0, 0, 0, 0);
            dateDifference = Math.abs(Number(todaysDate) - pickedDate);
            //7 Days=604800000ms
            if (dateDifference > 604800000)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
返回“true” 并尝试了以下方法:

validateDate("2012-11-23 17:06:46", "30-Nov-2012")
返回“false”


这似乎回答了您的问题,进一步的问题与algo无关,而更像是您的浏览器如何解释它以及您如何管理它。

Cerburus我必须将txtDate.value与serverDateTime进行比较,而不是与客户端DATEWhoops进行比较,忘记了那个变量。这应该可以做到。它从
serverDateTime
字符串中生成一个
Date
对象,添加一周,然后将其与输入进行比较。这些上限完全没有必要。这是因为
txtDate.value=“2012年11月30日”
在7天之内。代码是有效的。尝试
txtDate.value=“5-Dec-2012”
我假设
txtDate
确实是一个对象?当我调试var today=NAN和var nextWeek时=NAN@lax. 关掉[Capslock]。我们试图帮助你,但你对我们的意见不太友好。我编辑了小提琴并更新了链接。这一个在我安装的所有浏览器中都能正常工作,但您必须更改从服务器获取的日期格式。我必须将txtDate.value与serverDateTime进行比较,而不是与客户端date进行比较,不使用上述代码变量serverDateTime=new date向我发出警报(“2012-11-23 17:06:46”);获取NANIt,它没有使用警报。我会更新的。您仍然需要根据您的场景调整此设置。我只向您展示了如何获得不同的ServerDateTime格式,IE和Firefox只接受按照ecmascript标准@Cris linked me设置格式的日期字符串,如下所示:您是否阅读了我提供的链接以查看Javascript接受的日期/时间格式,并查看是否存在特定于区域性的问题?这里的大多数例子都是针对几个人和浏览器的,为什么不是你的呢?更确切地说,你使用什么浏览器(名称和版本)?我注意到Firefox和Chrome的区别。。。不知怎的,我总是忘记了Internet Explorer;)
function validateDate(serverDateTime, txtDate)
        {           
            var dateDifference;
            pickedDate = Date.parse(txtDate.replace(/-/g, " "));
            todaysDate = new Date(serverDateTime);
            todaysDate.setHours(0, 0, 0, 0);
            dateDifference = Math.abs(Number(todaysDate) - pickedDate);
            //7 Days=604800000ms
            if (dateDifference > 604800000)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
validateDate("2012-11-23 17:06:46", "30-Nov-2012")
validateDate("2012-11-23 17:06:46", "30-Dec-2012")