将字符串格式的日期与今天的日期进行比较

时间:2017-04-21 16:11:30

标签: javascript

我知道之前已经问过这个问题,但由于我的日期格式无法改变,我无法让它工作。任何帮助将不胜感激。

我的日期是这种格式;

4/11/2017 12:30 PM

如果我在开发人员工具中检查它,则将其显示为

4/11/2017 12:30 PM编辑:此处不会显示前置空格

即。前面有空格,不确定是否相关。

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

我已尝试修改以下代码但由于时间,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")
}

5 个答案:

答案 0 :(得分:0)

如果你的日期与13/04/2017的格式相同,你可以根据斜杠split字符串,并从左右开始比较值。

通过这个,我的意思是当你有每个日期的三个数值的数组时,你可以先比较年份,如果相同,继续比较月份,如果那个相同然后比较一天。

但是,如果一年中的一个是2018而另一个是2016,那么您会立即知道2018之后的一个。{/ p>

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

}

要摆脱“时间下午”部分,您可以简单地执行以下操作:

// Assuming your date has a structure like this: 4/11/2017 12:30 PM.

var newDate = unformattedDate.split(" ")[0];

// This will separate your date string by spaces, and since there are no spaces until after the year in your date, the 0 index will give you the date minus the time and pm portion. Please pardon the not-consistent variable names.

答案 1 :(得分:0)

问题在于您构建日期的方式。像这个var mydate = new Date(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")
}

答案 2 :(得分:0)

您可以拆分日期。请注意,您应按如下方式构建日期:

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

表示第一年,然后是月份,最后一天,正如您在https://www.w3schools.com/jsref/jsref_obj_date.asp

下看到的那样

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

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​​ =月份的月份,因为您可以在https://www.w3schools.com/jsref/jsref_getmonth.asp下查看。这就是我为var m1添加-1的原因。

答案 3 :(得分:0)

<强>问题:

由于您将日期与Invalid date进行比较,因此无法正常工作,它将始终返回false

<强>解释

Invalid date来自new Date('13/04/2017')行,因为13应该是month个数字而不是day,这是一个无效的月份,因为new Date(stringDate)将被视为本地日期而不是浏览器的UTC日期,这取决于您使用的是哪个浏览器。

您可以在JavaScript Date Specification中看到:

  

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

<强>演示:

因此,如果我们将new Date('13/04/2017')更改为new Date('04/13/2017'),代码将按预期运行:

var date = new Date();

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

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

答案 4 :(得分:-1)

if(date.getTime()>mydate.getTime()){
alert("greater");
}
else if (date.getTime()==mydate.getTime){
alert("simmilar");
else {alert("smaller");}