我知道之前已经问过这个问题,但由于我的日期格式无法改变,我无法让它工作。任何帮助将不胜感激。
我的日期是这种格式;
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")
}
答案 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");}