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