我想设置事件的倒计时,所以只有在事件没有开始的情况下,才会显示事件前几天的倒计时。日期存储在数据库中,如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变为天,但我不知道我的代码在哪里出错。
答案 0 :(得分:1)
好的,有几件事。
.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 。
答案 1 :(得分:0)
在我到达的帮助下,我为感兴趣的人发布了正确的代码
moment.locale('es');//Spanish Language for Moment
var hoy = moment();//Get client systemd date
var finicio = moment("08-02-2015", "DD-MM-YYYY");//A date for event start
var ffin = moment("12-02-2015", "DD-MM-YYYY");//A date for event end
$(function () {
if (hoy.isSame(finicio, "day")) {
$("#estadoevento").text("EN ESTE MOMENTO");
}//To compare todays date with event start date
else if (hoy.isBefore(finicio)) {
$("#estadoevento").text("EN ESPERA");
var falta = finicio.diff(hoy);
var duracionfalta = moment.duration(falta);
var faltante = Math.round(duracionfalta.asDays());
$("#contador").text("FALTAN " + faltante + " DÍAS");
}//If event hasn't started yet, this shows the amount of days remaining
else {
$("#estadoevento").text("EXPIRADO");
}//When the event already passed
});