Javascript 比较字符串格式的日期与今天的日期

Javascript 比较字符串格式的日期与今天的日期,javascript,Javascript,我知道以前有人问过这个问题,但我不能让它工作,因为我的日期格式,我不能改变。任何帮助都将不胜感激 我的日期是这样的格式 2017年11月4日下午12:30 如果我在开发工具中检查它,它会显示为 2017年11月4日下午12:30编辑:此处不显示预设空间 i、 e.前面有空格,不确定是否相关 有人知道这是否可能,或者如何将它与今天的日期进行比较,以确定它是在过去还是未来 我尝试过修补以下代码,但由于时间、PM和正向斜杠的原因,无法使其正常工作 var q = new Date(); var m =

我知道以前有人问过这个问题,但我不能让它工作,因为我的日期格式,我不能改变。任何帮助都将不胜感激

我的日期是这样的格式

2017年11月4日下午12:30

如果我在开发工具中检查它,它会显示为

2017年11月4日下午12:30编辑:此处不显示预设空间

i、 e.前面有空格,不确定是否相关

有人知道这是否可能,或者如何将它与今天的日期进行比较,以确定它是在过去还是未来

我尝试过修补以下代码,但由于时间、PM和正向斜杠的原因,无法使其正常工作

var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var y = q.getFullYear();

var date = new Date(d,m,y);

mydate=new Date('13/04/2017');
console.log(date);
console.log(mydate)

if(date>mydate)
{
    alert("greater");
}
else
{
    alert("smaller")
}

如果日期的格式与2017年4月13日相同,则可以基于斜杠拆分字符串,并从右向左比较值

我的意思是,当你对每个日期有三个值的数组时,你可以首先比较年份,如果年份相同,就比较月份,如果月份相同,就比较日期

但如果一年中的一个是2018年,而另一个是2016年,你会立即知道2018年的时间会晚一些

var st = "19/05/2019";
var st2 = "19/05/2019";

function provideLaterDate(date1, date2) {
    var splitDateDate1 = date1.split("/").reverse();
    var splitDateDate2 = date2.split("/").reverse();
    var laterDate = false;

    splitDateDate1.forEach(function(val, idx, arr) {
        if ( laterDate === false ) {
            if ( val > splitDateDate2[idx] ) {

                laterDate = splitDateDate1;
            } else if ( val < splitDateDate2[idx]) {

                laterDate = splitDateDate2;

            } else {
                laterDate = "Both are the same";
            }
        }
    });

    if ( /\//.test(laterDate) ) {
        return laterDate.reverse().join("/");    
    } else {
        return laterDate;
    }

}

问题在于你构建日期的方式。构建日期,如var mydate=新日期2017,04,03;它是有效的

var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var y = q.getFullYear();

var date = new Date(d, m, y);

var mydate = new Date(2017, 04, 03);
console.log(date);
console.log(mydate)

if (date > mydate) {
  alert("greater");
}
else {
  alert("smaller")
}

你可以分开日期。请注意,您应按照以下方式确定日期:

var date = new Date(y,m,d);
意思是先一年,然后是月,最后是天,如下面所示

您可以使用以下代码执行所需的操作:

var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var y = q.getFullYear();

var date = new Date(y,m,d);

newdate = '13/04/2017'
array = newdate.split('/');
var d1 = array[0]
var m1 = array[1]-1
var y1 = array[2]

mydate = new Date(y1,m1,d1);
console.log(date);
console.log(mydate)

if(date>mydate)
{
    alert("greater");
}
else
{
    alert("smaller")
}
通过使用date.toString函数,您始终可以检查创建的日期是否正确。请注意,月份0=一月,因为您可以在下面进行检查。这就是为什么我为var m1添加了-1。

问题:

它不起作用,因为您将日期与无效日期进行比较,它将始终返回false

说明:

无效日期来自行new date'13/04/2017',因为13应该是一个月数,而不是一个无效月的日期,因为浏览器将新的DatestringDate视为本地日期而不是UTC日期,这取决于您使用的浏览器

您可以从中看到:

由于浏览器的差异和不一致性,强烈建议使用date构造函数和date.parse解析日期字符串,因为它们是等效的。仅按惯例支持RFC 2822格式字符串。对ISO 8601格式的支持不同之处在于,仅日期字符串(例如1970-01-01)被视为UTC,而不是本地字符串

演示:

因此,如果我们将新日期“2017年4月13日”更改为新日期“2017年4月13日”,代码将按预期工作:

var日期=新日期; var mydate=新日期'04/13/2017'; console.logdate; console.logmydate 如果日期>我的日期{ 警惕性更高; }否则{ 小警报
}请注意,date的格式不正确,因为它应该创建为Datey、m、d,而mydate变量是无效的日期。您可以使用date.toString函数始终检查创建的日期是否正确。由于问题date中提供的代码格式不正确,因此此代码无法工作,因为它应创建为date Y、m、d,并且mydate变量是无效日期。感谢您的回答,您知道如何去掉时间和PM位吗?只需按空格字符再次拆分日期?当然。更新了帖子。
var date = new Date(y,m,d);
var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var y = q.getFullYear();

var date = new Date(y,m,d);

newdate = '13/04/2017'
array = newdate.split('/');
var d1 = array[0]
var m1 = array[1]-1
var y1 = array[2]

mydate = new Date(y1,m1,d1);
console.log(date);
console.log(mydate)

if(date>mydate)
{
    alert("greater");
}
else
{
    alert("smaller")
}