我的Javascript日期比较有什么问题

时间:2011-08-18 09:27:35

标签: javascript date comparison

我想在javascript中比较两个日期,但在计算日期时我会得到奇怪的值。

任何人都可以在我的代码中看到导致问题的明显内容吗?

问题是今天的日期变量看起来像一个普通的日期,但我下周和上周的计算结果都是大数字,而且比较不起作用。

//Handles client side date selection changed
function dateSelectionChanged(sender, args) {

    //Declare array for Day names
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

    //Get the date
    var date = sender.get_selectedDate();

    //Get todays Date
    var today = new Date();
    var nextWeek = new Date().setDate(today.getDate() + 7);
    var lastWeek = new Date().setDate(today.getDate() - 7);

    //Show the day name
    $('#<%= txtDay.ClientID %>').val(days[date.getDay()]);

    if ( date < lastWeek ) {
        alert('Date Under Week');
    }
    if ( date > nextWeek ) {
        alert('Date Over Week');
    }
}

这是调试中的代码,因此您可以看到值: enter image description here

修改 溶液

//Handles client side date selection changed
function dateSelectionChanged(sender, args) {

    //Declare array for Day names
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

    //Get the date
    var date = sender.get_selectedDate();

    //Get todays Date
    var today = new Date();
    var nextWeek = new Date().setDate(today.getDate() + 7);
    var lastWeek = new Date().setDate(today.getDate() - 7);

    //Get the dates in easier to compare format
    nextWeek = new Date(nextWeek);
    lastWeek = new Date(lastWeek);

    //Show the day name
    $('#<%= txtDay.ClientID %>').val(days[date.getDay()]);

    if ( date < lastWeek) {
        alert('Date Under Week');
    }
    if ( date > nextWeek) {
        alert('Date Over Week');
    }
}

3 个答案:

答案 0 :(得分:2)

对于setDate,JavaScript返回时间戳,表示自1970年1月1日00:00:00到特定时刻的毫秒数。它可能看起来毫无用处,但事实上它非常有用,因为你可以将任何时间表示为一个简单的数字。

如果您想要取回Date,可以使用:

new Date(timestamp);

所以,例如添加:

nextWeek = new Date(nextWeek);
lastWeek = new Date(lastWeek);

答案 1 :(得分:0)

另一种方法是设置这样的日期。

var today = new Date();
var nextWeek = new Date();
nextWeek.setDate(today.getDate() + 7);
var lastWeek = new Date();
lastWeek.setDate(today.getDate() - 7);

答案 2 :(得分:-1)

  

如果不提供参数,构造函数将为其创建Date对象   今天的日期和时间根据当地时间。如果你供应一些   参数但不是其他参数,缺少的参数设置为0.如果你   提供任何参数,你必须至少提供年,月和   天。您可以省略小时,分钟,秒和毫秒。

     

自1970年1月1日午夜起,以毫秒为单位测量日期   世界标准时间。   一天持有86,400,000毫秒。 Date对象范围是   相对于1970年1月1日,-100,000,000天到100,000,000天   UTC。

在比较日期时尝试以下代码

if ( today < lastWeek.getMilliseconds() ) {
        alert('Date Under Week');
    }
    if ( today > nextWeek.getMilliseconds() ) {
        alert('Date Over Week');
    }
  

Date对象提供跨平台的统一行为。