Count days until today moment.js

前端 未结 2 1716
温柔的废话
温柔的废话 2020-12-20 11:26

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 co

相关标签:
2条回答
  • 2020-12-20 11:44

    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:

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

    And I updated your markup to make use of the 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>
    

    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 call ko.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

    0 讨论(0)
  • 2020-12-20 11:55

    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:

    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
    

    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:

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

    Edit: I made you a fiddle with the example.

    0 讨论(0)
提交回复
热议问题