Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确比较两个日期和时间_Javascript - Fatal编程技术网

Javascript 正确比较两个日期和时间

Javascript 正确比较两个日期和时间,javascript,Javascript,我的目标是比较开始日期和结束日期时间的日期加时间 以下仅处理日期的代码无效 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

我的目标是比较开始日期和结束日期时间的日期加时间

以下仅处理日期的代码无效

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");
}
更新:

通过连接来比较开始日期和结束日期时间的日期和时间,并得到它们,这被认为不是正确的方法

var start = "22-Apr-2016"+ " "+startTime;
var end   = "22-Apr-2016"+ " "+endTime;
start     = new Date(start);
end       = new Date(end);
if(start.getTime() > end.getTime()){
  console.log("start greater ")
} else if(start.getTime() < end.getTime()) {
  console.log("start lesser ")
} else if(start.getTime() == end.getTime()) {
  console.log("start equals ")
}
var start=“2016年4月22日”+“”+startTime;
var end=“2016年4月22日”+“”+endTime;
开始=新日期(开始);
结束=新日期(结束);
if(start.getTime()>end.getTime()){
log(“启动更大的程序”)
}else if(start.getTime()
你不必做这些。只需以毫秒为单位获取时间并进行比较。因此,它将是这样的:

if (stdate.getTime() > endate.getTime()) {
     console.log("first date is greater");
}

if (stdate.getTime() == endate.getTime()) {
     console.log("Equal dates");
}
试试这个

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

两个JavaScript对象(在您的例子中是
Date
实例)只有在引用同一个对象时才能被认为是相等的。因此,当使用
=
进行比较时,即使两个对象的日期相同,也总是给出
false

如果你想比较两个日期,你必须比较它们的时间戳。您可以使用
.getTime()
方法获取它们:

if (stdate.getTime() == endate.getTime()) {
  console.log("Equal dates");
}

希望这对您有用。

比较日期是一种很好的方法,您的问题是如何将字符串转换为日期。您不应该使用日期构造函数(或Date.parse)来解析字符串,因为它在很大程度上依赖于实现,甚至与ECMA-262一致的字符串也不一定正确解析或给出预期结果

因此,第一个任务是解析日期字符串。可以使用库,但如果只有一种格式支持简单函数就足够了。如果日期和时间是作为单独的部分提供的,那么解析每个部分就相当简单了,可以将其作为单独的函数进行解析,也可以将其作为一个整体进行解析

/*@param{string}s-格式为dd MMM yyyy的日期字符串
**@returns{Date}Date假定为本地日期
*/
函数解析日期(个){
变量月份={1月:0日,2月:1日,3月:2日,4月:3日,5月:4日,6月:5日,
7月6日、8月7日、9月8日、10月9日、11月10日、12月11日};
var b=s.match(/\w+/g)| |[];
返回新日期(b[2],月[b[1]。切片(0,3).toLowerCase()],b[0]);
}
/*@param{string}s-格式为hh:mmap的时间字符串
**@返回转换为毫秒的{Number}时间
*/
函数parseTimeToMs(个){
var b=s.split(/\D/);
var h=b[0]%12+(/pm$/i.test?12:0);
返回h*3.6e6+b[1]*6e4;
}
/*@param{string}ds-格式为dd-MMM-yyyy的日期字符串
/*@param{string}ts-格式为hh:mmap的时间字符串
**@返回{Date}Date,假设本地日期是根据日期和时间字符串生成的
*/
函数getDate(ds、ts){
var d=解析日期(ds);
d、 setmillizes(d.getmillizes()+parseTimeToMs(ts));
返回d;
}
风险值起始日期='2016年4月22日';
var截止日期='2016年4月22日';
var startTime='10:14 AM';
var endTime='11:14 PM';
document.write('Start is:'+getDate(startDate,startTime));
写入('
结束为:'+getDate(endDate,endTime)); 编写(“
在结束之前开始?”+(getDate(startDate,startTime)
正文{
字体系列:courier、monospace;
字号:80%;

}
@mplungjan我将日期和时间作为单独的字段。不是在一个领域。如果您有一个示例,如果浏览器可以处理新日期(“DD-MMM-YYYY”),您能否仅提供一个副本?这仅仅是一个开始,因为他需要将上午10:14追加到it@syed-您可以使用类似的函数,注意它转换为UTC-0500,但您应该能够计算出来。如果您需要有关转换为日期的帮助,请发布另一个问题。在这个示例中,他的时间在哪里?@mplungjan这是一个正确的答案
getTime
返回自1970年1月1日以来的毫秒数。在本例中,他的上午10:14在哪里?@mplungjan问题是他们只想知道“第一步”。不过,这段代码也适用于此。他的下一个直接问题将是确定时间。另外,新日期(“DD-MMM-YYYY”)与浏览器的兼容性如何?这是现在更新的问题
if( (new Date(startDate).getDate() > new Date(endDate).getDate())){
    // to do
}