数天,直到今天moment.js(Count days until today moment.js)

2019-09-02 04:25发布

我有得到的天数,直到今天的函数。 它的工作原理不过,我使用moment.js写和格式化从JSON数据的日期,我认为这是造成冲突。 有没有办法做到使用moment.js同样的事情?

这是工作的JavaScript: http://jsfiddle.net/infatti/XeqPT/

// Count days due
function daysUntil(year, month, day) {
  var now = new Date(),
      dateEnd = new Date(year, month - 1, day), // months are zero-based
      days = (dateEnd - now) / 1000/60/60/24;   // convert milliseconds to days

  return Math.round(days);
}

如何能在同样的事情用moment.js做些什么呢?


如果有兴趣,这里是我如何当它不工作的日期拉动。

<span class="due-date" data-bind="textualDate: DueDate"></span>

ko.bindingHandlers.textualDate = {
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var valueUnwrapped = ko.utils.unwrapObservable(valueAccessor());
        var textContent = moment(valueUnwrapped).format("MM/DD/YYYY");
        ko.bindingHandlers.text.update(element, function () { return textContent; });
    }
};

Answer 1:

如果你有问题是使用moment.js获得两个日期之间的时间,那么你可以使用差异这样的功能:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
var diffInMs = a.diff(b); // 86400000 milliseconds
var diffInDays = a.diff(b, 'days'); // 1 day

现在,我不知道,如果你有任何KnockoutJS问题,但这应该确保你的计算与moment.js完成。

只要您有兴趣,我自己做了一个自定义绑定处理程序前一段时间显示了一下日期。 与你不同的是,我观察到的已经是一个瞬间的对象。 所以,我已经修改了它到这里,使其与标准的日期对象的工作:

    ko.bindingHandlers.moment = {
        update: function(element, valueAccessor) {
            var value = valueAccessor();
            var formattedValue = moment(ko.utils.unwrapObservable(value)).format('MM/DD/YYYY');
            $(element).text(formattedValue);
        }
    };

编辑:我做你的小提琴与示例。



Answer 2:

对我的作品-看到这个小提琴- http://jsfiddle.net/tlarson/sBMTn/5 。 这可能是有益的,如果你能告诉我们哪里存在问题,这样我们就可以看到这是怎么回事小提琴。

下面是我添加的代码:

var viewModel = {
    firstDate: ko.observable("2013-7-1"),
    secondDate: ko.observable("2013-9-1")
};
ko.applyBindings(viewModel);

我更新您的标记使用的视图模型的:

<div id="paging1">
    <ul class="list paging-items">
        <li><!-- item -->
            <h4>Due in <span class="days-due"></span> days</h4>

            <h4><span data-bind="textualDate: firstDate" class="due-date"></span></h4>
        </li><!-- #item -->
        <li><!-- item -->
            <h4>Due in <span class="days-due"></span> days</h4>

            <h4><span data-bind="textualDate: secondDate" class="due-date"></span></h4>
        </li><!-- #item -->
    </ul>
</div>

注意,你对jQuery的调用each方法只能对已经在DOM数据行事。 所以一定要放在你打电话后ko.applyBindings

然而...

你可能要考虑使用计算机,而不是使用jQuery的页面“由于在X天”的一部分。 这里是你如何能做到这一点: http://jsfiddle.net/tlarson/sBMTn/1



文章来源: Count days until today moment.js