【问题标题】:Whats wrong with my Javascript Date Comparison我的 Javascript 日期比较有什么问题
【发布时间】:2011-08-18 09:27:34
【问题描述】:

我很想在 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');
    }
}

这是 Debug 中的代码,因此您可以查看值:

编辑: 解决方案

//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');
    }
}

【问题讨论】:

  • 到底是什么问题?您获得的大量数字?
  • 只是一个评论,因为这并不是一个完整的答案。另一种方法是强制 today 成为一个数字。这其实很简单:today = +(new Date());

标签: javascript date comparison


【解决方案1】:

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

如果你想找回Date,你可以使用:

new Date(timestamp);

例如添加:

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

【讨论】:

  • 谢谢,看来问题已经解决了。没有帮助我将今天的日期与下周和上周进行比较,而不是选择的日期!
  • @WraithNath:糟糕,我没看到。你可能想要date.setDate
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    如果不提供参数,构造函数会为 今天的日期和时间以当地时间为准。如果你提供一些 参数而不是其他参数,缺少的参数设置为 0。如果你 提供任何参数,您必须至少提供年、月和 天。您可以省略小时、分钟、秒和毫秒。

    日期是从 1970 年 1 月 1 日午夜开始的毫秒数 世界标准时间。 一天有 86,400,000 毫秒。日期对象范围是 -100,000,000 天到 100,000,000 天(相对于 1970 年 1 月 1 日) 世界标准时间。

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

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

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

    【讨论】:

    • 谢谢,刚刚意识到我也在将今天的日期与上周和下周进行比较,这将永远无法工作!更新了代码以使用所选日期。
    • 由于lastWeeknextWeek 是数字,因此这些功能不可用。此外,它返回一秒内的毫秒数,因此它不是非常有用,在这种情况下它们是相同的,只是日期数字已更改。
    • 你随机选择了getMilliseconds吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多