sim*_*ple 23 javascript jquery knockout.js momentjs
我有一个功能,可以获得直到今天的天数.但它工作正常,我使用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);
}
Run Code Online (Sandbox Code Playgroud)
如何使用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; });
}
};
Run Code Online (Sandbox Code Playgroud)
Jal*_*ayn 43
如果您遇到的问题是使用moment.js来获取两个日期之间的持续时间,那么您可以像这样使用diff函数:
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
Run Code Online (Sandbox Code Playgroud)
现在,我不知道你是否对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);
}
};
Run Code Online (Sandbox Code Playgroud)
编辑:我让你成为一个小例子.