我正在尝试使用momentjs
来检查指定的日期是今天还是将来。
这是我到目前为止所做的:
<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">
var SpecialToDate = '31/01/2014'; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
alert('date is today or in future');
} else {
alert('date is in the past');
}
</script>
该代码正在评估我的日期(2014年1月31日)作为过去的日期。
知道我做错了吗?
答案 0 :(得分:251)
使用isSame函数
var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate)
{
}
答案 1 :(得分:170)
阅读文档:http://momentjs.com/docs/#/displaying/difference/后,您必须将diff
函数视为减号运算符。
// today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0
因此,您必须逆转您的病情。
如果要检查一切正常,可以在函数中添加一个额外的参数:
moment().diff(SpecialTo, 'days') // -8 (days)
答案 2 :(得分:120)
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');
答案 3 :(得分:68)
您可以使用momentjs的isAfter()
查询功能:
检查片刻是否在另一个时刻之后。
moment('2010-10-20').isAfter('2010-10-19'); // true
如果要将粒度限制为毫秒以外的单位,请将单位作为第二个参数传递。
moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true
答案 4 :(得分:54)
由于似乎没有人提及它,检查Moment日期对象是否过去的最简单方法是:
momentObj.isBefore()
或将来:
momentObj.isAfter()
只需将args留空即可 - 现在默认为。
还有isSameOrAfter
和isSameOrBefore
。
N.B。这个因素及时。如果您只关心这一天,请参阅Dipendu's answer。
答案 5 :(得分:9)
反转isBefore方法,检查日期是否与今天或将来相同,如下:
!moment(yourDate).isBefore(moment(), "day");
答案 6 :(得分:8)
检查今天是否:
如果我们比较两个也包含时间信息的日期isSame
将明显失败。如果两个日期跨越新的一天,diff
将失败:
var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss");
var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss");
var diff = date2.diff(date1); // 2seconds
我认为最好的方法,即使不是快而短,也是如下:
var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()
检查它是否在将来:
正如其他用户所建议的那样,diff
方法也有效。
var isFuture = now.diff(anotherDate) < 0
答案 7 :(得分:6)
如果你只需要知道哪一个更大,你也可以直接比较它们:
var SpecialToDate = '31/01/2014'; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment() > SpecialTo) {
alert('date is today or in future');
} else {
alert('date is in the past');
}
希望这有帮助!
答案 8 :(得分:4)
以防万一其他人需要这样做,只需这样做:
const isToday = moment(0, "HH").diff(date, "days") == 0;
或者如果您需要功能:
isToday = date => moment(0,"HH").diff(date, "days") == 0;
日期是您要检查的日期。
说明
moment(0, "HH")
返回今天的午夜。
date1.diff(date2, "days")
返回date1和date2之间的天数。
更新
此后,我发现了isSame函数,我认为它是用于确定日期是否为今天的正确函数:
moment().isSame('2010-02-01', 'day'); // Return true if we are the 2010-02-01
答案 9 :(得分:4)
如果firstDate相同或之后(将来)secondDate 返回true 否则返回false。 Toda是firstDate = new Date();
static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if (date1 && date2) {
return date1.isSame(date2,'day');
}
return false;
}
static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isAfter(date2,'day');
}
return false;
}
static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isBefore(date2,'day');
}
return false;
}
有isSame,isBefore和istfter for day比较时刻的例子;
pip search python3.4-dev
答案 10 :(得分:2)
var serviceUrl = GetServiceUrlByChannelId(channel);
MicrosoftAppCredentials.TrustServiceUrl(serviceUrl, DateTime.Now.AddDays(7)); //todo change magic number
var account = new MicrosoftAppCredentials([MicrosoftAppId], [MicrosoftAppPassword]);
_connector = new ConnectorClient(new Uri(serviceUrl), account);
var botAccount = new ChannelAccount { Id = bot.Id, Name = bot.Name };
var toAccount = new ChannelAccount { Id = recipient.Id, Name = recipient.Name };
if (!MicrosoftAppCredentials.IsTrustedServiceUrl(serviceUrl)) {
throw new Exception("Cannot create conversation! Service URL is not trusted!");
}
var conversationResponse = _connector.Conversations.CreateDirectConversation(botAccount, toAccount);
然后只需使用它:
function isTodayOrFuture(date){
date = stripTime(date);
return date.diff(stripTime(moment.now())) >= 0;
}
function stripTime(date){
date = moment(date);
date.hours(0);
date.minutes(0);
date.seconds(0);
date.milliseconds(0);
return date;
}
答案 11 :(得分:2)
使用最简单的一个来检查将来的日期
if(moment().diff(yourDate) >= 0)
alert ("Past or current date");
else
alert("It is a future date");
答案 12 :(得分:1)
在moment().subtract(1, "day");
参考: - http://momentjs.com/docs/#/manipulating/subtract/
function myFunction() {
var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD");
var SpecialToDate = document.getElementById("theDate").value;
if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) {
alert("date is today or in future");
console.log("date is today or in future");
} else {
alert("date is in the past");
console.log("date is in the past");
}
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<input type="date" id="theDate" onchange="myFunction()">
答案 13 :(得分:1)
最简单的答案是:
const firstDate = moment('2020/10/14'); // the date to be checked
const secondDate = moment('2020/10/15'); // the date to be checked
firstDate.startOf('day').diff(secondDate.startOf('day'), 'days'); // result = -1
secondDate.startOf('day').diff(firstDate.startOf('day'), 'days'); // result = 1
它将检查午夜值并返回准确的结果。当两个日期之间的时间差也小于24小时时,它也将起作用。
答案 14 :(得分:0)
我想要其他东西,但最终找到了一个你可以尝试的技巧
somedate.calendar(compareDate, { sameDay: '[Today]'})=='Today'
var d = moment();
var today = moment();
console.log("Usign today's date, is Date is Today? ",d.calendar(today, {
sameDay: '[Today]'})=='Today');
var someRondomDate = moment("2012/07/13","YYYY/MM/DD");
console.log("Usign Some Random Date, is Today ?",someRondomDate.calendar(today, {
sameDay: '[Today]'})=='Today');
var anotherRandomDate = moment("2012/07/13","YYYY/MM/DD");
console.log("Two Random Date are same date ? ",someRondomDate.calendar(anotherRandomDate, {
sameDay: '[Today]'})=='Today');
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
答案 15 :(得分:0)
如果我们想要在没有时间的情况下获得差异,您可以使用时刻的格式获得不同的日期(只有没有时间的日期),如下所示。
因为,我在做的时候面临着差异的问题;
moment().diff([YOUR DATE])
所以,想出了以下内容;
const dateValidate = moment(moment().format('YYYY-MM-DD')).diff(moment([YOUR SELECTED DATE HERE]).format('YYYY-MM-DD'))
IF dateValidate > 0
//it's past day
else
//it's current or future
如果有什么需要改进,请随时发表评论。
谢谢,
答案 16 :(得分:0)
检查以下内容:
let isContinue = moment().diff('2020-04-04T20:06:11+05:30')/1000
它在几秒钟内返回。
如果将检查2分钟,则
if (isContinue < 120) {
..To check otp details or further logic
} else {
// otp is getting invalid
}
答案 17 :(得分:0)
我编写了函数来检查 Moment 类型的日期是否为经过的日期,作为函数和自描述函数。 也许它可以帮助某人。
function isItBeforeToday(MomentDate: Moment) {
return MomentDate.diff(moment(0, 'HH')) < 0;
}
function isItAfterToday(MomentDate: Moment) {
return MomentDate.diff(moment(0, 'HH')) > 0;
}