我想为事件设置倒计时,因此仅在事件尚未开始的情况下,才显示事件前几天的倒计时。日期像DD-MM-YYYY这样存储在数据库中,因此我使用Moment.js对其进行了转换,但是我仍然没有得到剩余的日期。这是我的代码
moment.locale('es');
var hoy = moment().format("DD-MM-YYYY");
var finicio = moment("20-01-2015", "DD-MM-YYYY").format("DD-MM-YYYY");
var ffin = moment("19-01-2015", "DD-MM-YYYY").format("DD-MM-YYYY");
$(function () {
if (finicio < hoy) {
$("#estadoevento").text("EXPIRADO");
}
else if (finicio > hoy) {
$("#estadoevento").text("EN ESPERA");
var contador = moment(finicio).diff(moment(hoy));
var espera = moment.duration(contador);
var restante = espera.asDays();
$("#contador").text("FALTAN " + restante + " DÍAS");
}
else {
$("#estadoevento").text("EN ESTE MOMENTO");
}
});
但是我没有值,我不知道是否必须重新声明变量,当前,如果事件过期,传入或今天,并且正常工作,则代码仅在span标签上显示一条消息。
变量finicio是包含事件开始日期的变量,因此,如果事件在五天开始,我将尝试获取该数字,但尝试返回,但它返回0值。我也使用jQuery。
contador变量是两个日期的减法,espera变量获得contador的持续时间,最后restante更改为几天,但是我不知道我的代码在哪里出错。
最佳答案
好吧,有几件事。
格式返回字符串.format()
输出一个字符串。
因此,当您执行finicio < hoy
时,您正在比较哪个字符串更大。如果字符串的格式设置为YYYY-MM-DD
(从大到小),则可以,但是当它们的日期为第一天时,将无法正确比较它们。
而是使用isBefore
isSame
和isAfter
。并将它们与实际力矩对象一起使用:
var hoy = moment(); // No .format
var finicio = moment("20-01-2015", "DD-MM-YYYY");
var ffin = moment("19-01-2015", "DD-MM-YYYY");
if( hoy.isAfter(finicio) ){ ... }
从字符串中创建片刻
这个:
var contador = moment(finicio).diff(moment(hoy));
是相同的
var contador = moment('20-01-2015').diff(moment('20-01-2015'));
因为finicio以及字符串如何,而不是矩对象。
这意味着您正在根据字符串创建两个矩对象,而无需告诉矩它们的格式。如果单独运行
moment('20-01-2015')
,则会出现错误。如果您创建
finicio
和hoy
时刻对象而不是字符串,则该代码将起作用。或者,如果您提供格式字符串:moment(finicio,"DD-MM-YYYY")
。和以前一样,我建议在创建
.format
,hoy
和finicio
时仅删除ffin
,以便可以使用矩对象。编辑:粒度
您可以使用
isBefore
isSame
和isAfter
进行的另一件事是设置粒度。moment().isSame('2015-02-06'); // false, because time is different
moment().isSame('2015-02-06', 'day'); // true, because anything smaller than days is ignored
这是注释固定的JSFiddle。
关于javascript - 使用Moment.js从减去到日期获取日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27989676/