我有两个格式为m/d/yyyy的字符串日期。例如,“11/1/2012”、“1/2/2013”。 我正在编写一个JavaScript函数来比较两个字符串日期。我的函数签名是bool isLater(string1, string2)
,如果string1代表的日期晚于string2代表的日期,则返回true,否则返回false。因此,isLater(“1/2/2013”,“11/1/2012”)应该返回true。我如何编写这个JavaScript函数?
我有两个格式为m/d/yyyy的字符串日期。例如,“11/1/2012”、“1/2/2013”。 我正在编写一个JavaScript函数来比较两个字符串日期。我的函数签名是bool isLater(string1, string2)
,如果string1代表的日期晚于string2代表的日期,则返回true,否则返回false。因此,isLater(“1/2/2013”,“11/1/2012”)应该返回true。我如何编写这个JavaScript函数?
const d1 = Date.parse("2012-11-01");
const d2 = Date.parse("2012-11-04");
if (d1 < d2) {
console.log("Error!");
}
或者,如评论中所述,直接比较字符串:
if ("2012-11-01" < "2012-11-04") {
console.log("Error!");
}
"2012-11-01" < "2012-11-04"
。 - RobG您可以简单地比较两个字符串
function isLater(dateString1, dateString2) {
return dateString1 > dateString2
}
那么
isLater("2012-12-01", "2012-11-01")
在以下情况下返回true
isLater("2012-12-01", "2013-11-01")
返回false
false
:D。 - ahmadalibaloch2017/10/26
和2017/10/7
,则会得到false
。很重要的一点是,此解决方案所需的格式必须非常特定才能正常工作。 - Max将日期解析并像数字一样进行比较:
function isLater(str1, str2)
{
return new Date(str1) > new Date(str2);
}
如果您需要支持其他日期格式,请考虑使用像date.js这样的库。
==
或 !=
。 - Antti Haapala -- Слава Україні直接解析不符合 yyyy-mm-dd 格式的日期字符串是行不通的,比如在被接受的答案中。但是vitran的回答可以工作,但其中混合了一些 JQuery,所以我稍微修改了一下。
// Takes two strings as input, format is dd/mm/yyyy
// returns true if d1 is smaller than or equal to d2
function compareDates(d1, d2){
var parts =d1.split('/');
var d1 = Number(parts[2] + parts[1] + parts[0]);
parts = d2.split('/');
var d2 = Number(parts[2] + parts[1] + parts[0]);
return d1 <= d2;
}
附言:本来想直接在vitran的帖子下进行评论,但是由于我的声望值不够所以无法实现。
这个在 Next.js/React 中对我有效
import { format, parse, isBefore } from "date-fns";
...
{isBefore(new Date(currentDate), new Date(date)) ? (
<span>Upcoming Event</span>
) : (
<span>Past Event</span>
)}
...
isBefore(date, dateToCompare)
<pre><code>
var parts1 = "26/07/2020".split('/');
var parts2 = "26/07/2020".split('/');
var latest = false;
if (parseInt(parts1[2]) > parseInt(parts2[2])) {
latest = true;
} else if (parseInt(parts1[2]) == parseInt(parts2[2])) {
if (parseInt(parts1[1]) > parseInt(parts2[1])) {
latest = true;
} else if (parseInt(parts1[1]) == parseInt(parts2[1])) {
if (parseInt(parts1[0]) >= parseInt(parts2[0])) {
latest = true;
}
}
}
return latest;
</code></pre>
var parts ='01/07/2016'.val().split('/');
var d1 = Number(parts[2] + parts[1] + parts[0]);
parts ='20/06/2016'.val().split('/');
var d2 = Number(parts[2] + parts[1] + parts[0]);
return d1 > d2