我的目标是比较日期加上开始和结束日期时间的时间。
以下仅处理日期的代码无效
True
更新:
通过连接来比较开始和结束日期时间的日期和时间是不正确的。
var startDate = "22-Apr-2016";
var endDate = "22-Apr-2016";
var stdate = new Date(startDate);
var endate = new Date(endDate);
var startTime = "10:14 AM";
var endTime = "11:14 PM";
var stTime = startTime.substring(0, 5);
var enTime = endTime.substring(0, 5);
var stAMorPM = startTime.substring(6, 8);
var enAMorPM = endTime.substring(6, 8);
if( (stdate > endate)) {
console.log("first date is greater");
}
if((stdate == endate)) {
console.log("Equal dates");
}
答案 0 :(得分:1)
你不必完成所有这些。只需以毫秒为单位获取时间并进行比较。所以就是这样:
if (stdate.getTime() > endate.getTime()) {
console.log("first date is greater");
}
if (stdate.getTime() == endate.getTime()) {
console.log("Equal dates");
}
答案 1 :(得分:1)
在您的Date
实例中,只有两个JavaScript对象引用同一个对象时才能被视为相等。因此,使用false
进行比较时,即使具有相同日期的两个对象也始终会==
。
如果要比较两个日期,则必须比较它们的时间戳。您可以使用.getTime()
方法获取它们:
if (stdate.getTime() == endate.getTime()) {
console.log("Equal dates");
}
答案 2 :(得分:1)
比较日期是一个很好的方法,你的问题是如何将字符串转换为日期。您不应该使用Date构造函数(或 Date.parse )来解析字符串,因为它在很大程度上取决于实现,甚至与ECMA-262一致的字符串也不一定正确解析或给出预期的结果。
因此,第一项任务是解析日期字符串。您可以使用库,但如果您只有一种格式来支持简单的功能就足够了。如果日期和时间作为单独的部分提供,则解析每个部分相当简单,可以是单独的函数,也可以是一个整体,例如。
/* @param {string} s - date string in format dd-MMM-yyyy
** @returns {Date} Date assuming local date
*/
function parseDate(s) {
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};
var b = s.match(/\w+/g) || [];
return new Date(b[2], months[b[1].slice(0,3).toLowerCase()], b[0]);
}
/* @param {string} s - time string in format hh:mmap
** @returns {Number} time converted to milliseconds
*/
function parseTimeToMs(s) {
var b = s.split(/\D/);
var h = b[0]%12 + (/pm$/i.test(s)? 12 : 0);
return h*3.6e6 + b[1]*6e4;
}
/* @param {string} ds - date string in format dd-MMM-yyyy
/* @param {string} ts - time string in format hh:mmap
** @returns {Date} Date assuming local date built from date and time strings
*/
function getDate(ds, ts) {
var d = parseDate(ds);
d.setMilliseconds(d.getMilliseconds() + parseTimeToMs(ts));
return d;
}
var startDate = '22-Apr-2016';
var endDate = '22-Apr-2016';
var startTime = '10:14 AM';
var endTime = '11:14 PM';
document.write('Start is: ' + getDate(startDate, startTime));
document.write('<br>End is : ' + getDate(endDate, endTime));
document.write('<br>Start before end? ' + (getDate(startDate, startTime) < getDate(endDate, endTime)));
body {
font-family: courier, monospace;
font-size: 80%;
}
请注意,如果使用关系运算符<
和>
,操作数将被强制转换为数字,但是如果与==
或===
进行相等比较,则会总是得到假,因为他们将操作数比作对象,它们只与自己相等。
因此,您可能希望始终将日期显式转换为数字以确保,一元+
运算符对此非常方便:
+getDate(startDate, startTime) < +getDate(endDate, endTime)
和
+getDate(startDate, startTime) == +getDate(endDate, endTime)
答案 3 :(得分:-1)
试试这个
var startDate = "22-Apr-2016";
var endDate = "22-Apr-2016";
var stdate = new Date(startDate);
var endate = new Date(endDate);
if( (stdate.toUTCString() > endate.toUTCString())) {
alert("first date is greater");
}
if(stdate.toUTCString() == endate.toUTCString()) {
alert("Equal dates");
}
答案 4 :(得分:-2)
if( (new Date(startDate).getDate() > new Date(endDate).getDate())){
// to do
}
希望这适合你。