使用时刻和langs比较JavaScript中的日期

时间:2014-02-07 04:37:53

标签: javascript date momentjs date-comparison

我有两个日期,即newdate和哈哈。 newdate将是今天的日期(当前日期)和haha日期可以是任何。以下代码对我来说不起作用,因为我提供了
newdate :2014年2月7日10:04
哈哈:03-Feb-2014 00:00
它总是来到其他地方 的 SDATE :03-FEB-2014
stime :00:00

var haha=sdate+" "+stime;
    var newdate=new Date();
                  var date_str = moment(newdate).format("DD-MMM-YYYY HH:mm");
                alert(date_str);
                  if (Date.parse(haha) < Date.parse(date_str)) {

                  alert("Start date cannot be less than today's date");

                  return false;

                  }
                  else {

                      alert("hahahhahaha");
                  }

注意我正在使用langs javscript的时刻

2 个答案:

答案 0 :(得分:0)

您的代码有效。 Stime格式错误从第一组00前面删除冒号.stime 00:00。你是如何产生这种问题的原因?

您可以看到我的测试here

var sdate = "03-Feb-2014";
var stime = "00:00";
var haha = sdate + " " + stime;
var newdate = new Date();

if (navigator.appName.indexOf("Internet Explorer") != -1) {
    alert("isIE");
    var dateObject = (parseISO8601(haha));
    var hahaDate = new Date(dateObject.year, dateObject.month, dateObject.day, dateObject.hour, dateObject.min);
    alert(hahaDate);
    if (hahaDate.getTime() < newdate.getTime()) {
        alert("Start date cannot be less than today's date");
        return false;
    } else {
        alert("hahahhahaha");
    }
} else {

    var date_str = moment(newdate).format("DD-MMM-YYYY HH:mm");
    alert(date_str);
    if (Date.parse(haha) < Date.parse(date_str)) {
        alert("Start date cannot be less than today's date");
        return false;
    } else {
        alert("hahahhahaha");
    }
}

function parseISO8601(dateStringInRange) {
    var dateAsObject = {};

    var splitTimeFromDate = dateStringInRange.split(" ");

    var splitTimeValues = splitTimeFromDate[1].split(":");

    dateAsObject.hour = splitTimeValues[0];
    dateAsObject.min = splitTimeValues[1];

    var splitDate = splitTimeFromDate[0].split("-");
    dateAsObject.year = splitDate[2];
    dateAsObject.day = splitDate[0];
    dateAsObject.month = monthToNum(splitDate[1]);
    return dateAsObject;

}

function monthToNum(month) {
    if (month == "Feb") return 1;
}

[编辑:好的对不起我搞砸了冒号,如果它在其他方面失败了你确定你的单元测试包含足够的场景,如果日期大于和小于当前日期,如果它只是小于就像你的例子一样,你永远不会在其他地方点击代码。再次,代码正常工作不知道该说什么:-(,更新两种情况的例子]

[编辑:这是一个不完整的例子你必须记住javascript不是通用的。当你问一个关于JS的问题假设为DEV我们都使用Chrome或FF,或者至少发布你厌倦的浏览器。我提供了一个如何实现这一目标的简单示例。坦率地说,我不喜欢外部框架,当我可以自己做,所以你可以看到我没有使用它随意做你想要的问题是因为IE解析日期时间的方式你必须使用更通用的格式,如一个提供如下。可能的格式示例:http://www.w3schools.com/jsref/jsref_obj_date.asp。无论如何GL]

答案 1 :(得分:0)

这有点令人费解,请考虑:

var newdate = new Date();
var date_str = moment(newdate).format("DD-MMM-YYYY HH:mm");
Date.parse(date_str);

如果以上工作(并且绝对不能保证Date.parse将正确解析所有正在使用的浏览器中的字符串),那么所有这些都等同于:

var newdate = new Date();
newdate.setSeconds(0, 0);

你会更好地解析 haha​​ (或者使用moment.js,因为你已经拥有它)并比较结果日期对象。

考虑:

// s is dd-mmm-yyyy hh:mm
function stringToDate(s) {
  s = s.split(/[- :]/);
  var months = {'jan':0, 'feb':1, 'mar':2, 'apr':3, 'may':4, 'jun': 5,
                'jul':6, 'aug':7, 'sep':8, 'oct':9, 'nov':10, 'dec':11};
  return new Date(s[2], months[s[1].toLowerCase()], s[0], s[3], s[4], 0, 0);
}

var newdate = '07-Feb-2014 10:04';
var haha    = '03-Feb-2014 00:00';

alert(stringToDate(newdate).getTime() == stringToDate(haha).getTime()); // false

// Set to same time
var newdate = '03-Feb-2014 00:00';

alert(stringToDate(newdate).getTime() == stringToDate(haha).getTime()); // true