我有两个日期,即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的时刻
答案 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