I have a function that gets the number of days until today. It works however, I am using moment.js to write and format the date from JSON data and I think it is causing a conflict. Is there a way to do the same thing using moment.js?
This is the working 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);
}
How can the same thing be done using moment.js?
If interested, here is how I am pulling in the date when it does not work.
<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; });
}
};
If the problem you have is to use moment.js to get the duration between two dates, then you can use the diff function like this:
Now, I don't know if you have any problem with KnockoutJS, but this should ensure that your computation is done with moment.js.
Just for your interest, I made myself a custom binding handler for displaying a moment date some time ago. The difference with yours is that my observable was already a moment object. So, I've modified it down here to make it work with standard date objects:
Edit: I made you a fiddle with the example.
Works for me - see this fiddle - http://jsfiddle.net/tlarson/sBMTn/5. It might be helpful if you could show us a fiddle where the problem exists so that we can see what's going on.
Here is the code I added:
And I updated your markup to make use of the viewmodel:
Note that your call to jQuery's
each
method can only act on data that is already in the DOM. So be sure to put it after you callko.applyBindings
However...
You might want to consider using a computed rather than using jQuery for the 'Due in X days' part of the page. Here is how you could do that: http://jsfiddle.net/tlarson/sBMTn/1