Javascript 计算到今天的天数moment.js
我有一个函数,可以计算到今天为止的天数。但是它可以工作,我正在使用moment.js从JSON数据中写入和格式化日期,我认为这会导致冲突。有没有一种方法可以使用moment.js做同样的事情 这是工作的JavaScript: 如何使用moment.js完成同样的事情Javascript 计算到今天的天数moment.js,javascript,jquery,knockout.js,momentjs,Javascript,Jquery,Knockout.js,Momentjs,我有一个函数,可以计算到今天为止的天数。但是它可以工作,我正在使用moment.js从JSON数据中写入和格式化日期,我认为这会导致冲突。有没有一种方法可以使用moment.js做同样的事情 这是工作的JavaScript: 如何使用moment.js完成同样的事情 如果有兴趣,这里是我如何拉在日期时,它不工作 <span class="due-date" data-bind="textualDate: DueDate"></span> ko.bindingHandl
如果有兴趣,这里是我如何拉在日期时,它不工作
<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; });
}
};
ko.bindingHandlers.textualDate={
更新:函数(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var valueUnwrapped=ko.utils.unwrapObservable(valueAccessor());
var textContent=时刻(值未包装)。格式(“MM/DD/YYYY”);
update(元素,函数(){return textContent;});
}
};
如果您遇到的问题是使用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);
}
};
编辑:我用这个例子给你做了一个例子。对我有用-看这把小提琴-。如果你能给我们看一把小提琴,看看哪里有问题,这样我们就可以看到发生了什么 以下是我添加的代码:
var viewModel = {
firstDate: ko.observable("2013-7-1"),
secondDate: ko.observable("2013-9-1")
};
ko.applyBindings(viewModel);
我更新了您的标记以使用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的每个方法的调用只能作用于DOM中已有的数据。所以一定要在调用ko.applyBindings
然而
您可能想考虑使用计算而不是使用jQuery用于页面的“到期日”。您可以这样做:
“我正在使用moment.js从JSON数据编写和格式化日期,我认为这会导致冲突。”您为什么这么认为?计算日期和输出日期是完全不相关的操作。@alex23使用日期库有很多原因。日期/时间数学很难看,而且充满了边缘情况(可变的月长、时区、夏令时、闰年)。当我手动将日期输入html时,它可以工作。当我将数据绑定到html中时,它不起作用。这种计算让我感到有点紧张。并不是所有的日子都有24小时,有的有23小时,有的有25小时(还有其他类似的奇怪)。一天中的某个时间在now
上,而不是dateEnd
(现在是午夜),这将进一步扭曲结果。在这两者之间,我不能百分之百地确定Math.round
是否为您排序…”“当我手动将日期放入html时,它是有效的。当我将数据绑定到html时,它不起作用。”在问题的代码/标记中(以及在小提琴中——我没有看到任何数据绑定——但不仅仅是在那里)。
<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>