0

我有两个日期,即 newdate 和 haha​​。newdate 将是今天的日期(当前日期),哈哈日期可以是任何日期。下面的代码对我不起作用,因为我提供了
newdate:2014 年 2 月 7 日 10:04
哈哈:2014 年 2 月 3 日 00:00
它总是来到其他部分
日期:03-Feb-2014
时间: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 的时刻

4

2 回答 2

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
于 2014-02-07T06:45:16.017 回答
0

您的代码有效。时间格式错误 去掉第一组 00 前面的冒号。时间 00:00。你是如何产生时间这是你问题的原因?

你可以在这里看到我的测试。

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;
}

[编辑:好的,对不起,我把冒号搞砸了,如果它在其他地方失败,你确定你的单元测试包含足够的场景,如果日期小于和小于你的示例,那么日期既大于也小于当前日期你永远不会碰到 else 中的代码。再次,代码只是工作不知道该说什么:-(,两种情况的更新示例]

[编辑:这是一个不完整的示例,您必须记住 javascript 不是通用的。当您询问有关 JS 的问题时,假设我们都使用 Chrome 或 FF,或者至少发布您厌倦的浏览器。我提供了一个简单的例子来说明我将如何做到这一点。坦率地说,当我可以自己做时,我不喜欢外部框架,所以你可以看到我没有使用它随意做你想做的事情,问题是由 IE Parses DateTime 的方式引起的,你必须使用更通用的格式,比如下面提供了一个。可能的格式示例:http ://www.w3schools.com/jsref/jsref_obj_date.asp 。无论如何GL]

于 2014-02-07T04:58:26.030 回答