Getting Specific Number of Days With Moment.js, Node npm and Handlbars












0















I am using moment.js in node Handlebars. I found this helper: http://moment.handlebars.solidgoldpig.com/ and it's been useful but I would like to be able to calculate the number of days between now and a specific date in the future and return the answer in days.



{{moment "12/10/2018" "from" dfrom}} returns "22 days". {{moment "12/25/2018" "from" dfrom}} returns "in a month". What I want is "38 days".



I can't figure out what needs to change in handlebars to accomplish this. I would appreciate any and all suggestions.



To follow through and provide a detailed explanation of what worked for me, I'm adding to this question. But essentially Marcos Casagrande's answer should be the accepted answer.




  1. I installed momentjs by from the command line npm install moment --save

  2. In server.js I added `var moment = require("moment");

  3. Then I copied Marcos Casagrande's answer into server.js, but added a bit of precision to the calculation. return Math.abs(moment().startOf('day').diff(moment(date).startOf('day'), 'days')+1);

  4. In my handlebars view I used {{days-diff "2018-12-25 00:00"}}

  5. I did not add moment.js in the html file's head.










share|improve this question

























  • This might be helpful... momentjs.com/docs/#/displaying/difference

    – dward
    Nov 18 '18 at 2:53











  • @dward, Thank you. What I'm having a challenge with is using moment.js with Handlebars.

    – SueJStevens
    Nov 18 '18 at 3:17











  • Are you not able to do the comparison or diff on the server? What if you mutated or mapped the array before the handlebars loop? Not sure what your constraints are. If client side, consider mapping your array or modifying object prior to binding or looping.

    – dward
    Nov 18 '18 at 3:19













  • Thanks again @dward. because I'm new to this I wasn't entirely clear what code to put where. Marcos Casagrande's answer below got be on the right track.

    – SueJStevens
    Nov 18 '18 at 19:21











  • No need to exclaim that you're new, we all start somewhere. :)

    – dward
    Nov 19 '18 at 16:15
















0















I am using moment.js in node Handlebars. I found this helper: http://moment.handlebars.solidgoldpig.com/ and it's been useful but I would like to be able to calculate the number of days between now and a specific date in the future and return the answer in days.



{{moment "12/10/2018" "from" dfrom}} returns "22 days". {{moment "12/25/2018" "from" dfrom}} returns "in a month". What I want is "38 days".



I can't figure out what needs to change in handlebars to accomplish this. I would appreciate any and all suggestions.



To follow through and provide a detailed explanation of what worked for me, I'm adding to this question. But essentially Marcos Casagrande's answer should be the accepted answer.




  1. I installed momentjs by from the command line npm install moment --save

  2. In server.js I added `var moment = require("moment");

  3. Then I copied Marcos Casagrande's answer into server.js, but added a bit of precision to the calculation. return Math.abs(moment().startOf('day').diff(moment(date).startOf('day'), 'days')+1);

  4. In my handlebars view I used {{days-diff "2018-12-25 00:00"}}

  5. I did not add moment.js in the html file's head.










share|improve this question

























  • This might be helpful... momentjs.com/docs/#/displaying/difference

    – dward
    Nov 18 '18 at 2:53











  • @dward, Thank you. What I'm having a challenge with is using moment.js with Handlebars.

    – SueJStevens
    Nov 18 '18 at 3:17











  • Are you not able to do the comparison or diff on the server? What if you mutated or mapped the array before the handlebars loop? Not sure what your constraints are. If client side, consider mapping your array or modifying object prior to binding or looping.

    – dward
    Nov 18 '18 at 3:19













  • Thanks again @dward. because I'm new to this I wasn't entirely clear what code to put where. Marcos Casagrande's answer below got be on the right track.

    – SueJStevens
    Nov 18 '18 at 19:21











  • No need to exclaim that you're new, we all start somewhere. :)

    – dward
    Nov 19 '18 at 16:15














0












0








0








I am using moment.js in node Handlebars. I found this helper: http://moment.handlebars.solidgoldpig.com/ and it's been useful but I would like to be able to calculate the number of days between now and a specific date in the future and return the answer in days.



{{moment "12/10/2018" "from" dfrom}} returns "22 days". {{moment "12/25/2018" "from" dfrom}} returns "in a month". What I want is "38 days".



I can't figure out what needs to change in handlebars to accomplish this. I would appreciate any and all suggestions.



To follow through and provide a detailed explanation of what worked for me, I'm adding to this question. But essentially Marcos Casagrande's answer should be the accepted answer.




  1. I installed momentjs by from the command line npm install moment --save

  2. In server.js I added `var moment = require("moment");

  3. Then I copied Marcos Casagrande's answer into server.js, but added a bit of precision to the calculation. return Math.abs(moment().startOf('day').diff(moment(date).startOf('day'), 'days')+1);

  4. In my handlebars view I used {{days-diff "2018-12-25 00:00"}}

  5. I did not add moment.js in the html file's head.










share|improve this question
















I am using moment.js in node Handlebars. I found this helper: http://moment.handlebars.solidgoldpig.com/ and it's been useful but I would like to be able to calculate the number of days between now and a specific date in the future and return the answer in days.



{{moment "12/10/2018" "from" dfrom}} returns "22 days". {{moment "12/25/2018" "from" dfrom}} returns "in a month". What I want is "38 days".



I can't figure out what needs to change in handlebars to accomplish this. I would appreciate any and all suggestions.



To follow through and provide a detailed explanation of what worked for me, I'm adding to this question. But essentially Marcos Casagrande's answer should be the accepted answer.




  1. I installed momentjs by from the command line npm install moment --save

  2. In server.js I added `var moment = require("moment");

  3. Then I copied Marcos Casagrande's answer into server.js, but added a bit of precision to the calculation. return Math.abs(moment().startOf('day').diff(moment(date).startOf('day'), 'days')+1);

  4. In my handlebars view I used {{days-diff "2018-12-25 00:00"}}

  5. I did not add moment.js in the html file's head.







node.js npm handlebars.js momentjs






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 18 '18 at 19:26







SueJStevens

















asked Nov 18 '18 at 2:40









SueJStevensSueJStevens

2315




2315













  • This might be helpful... momentjs.com/docs/#/displaying/difference

    – dward
    Nov 18 '18 at 2:53











  • @dward, Thank you. What I'm having a challenge with is using moment.js with Handlebars.

    – SueJStevens
    Nov 18 '18 at 3:17











  • Are you not able to do the comparison or diff on the server? What if you mutated or mapped the array before the handlebars loop? Not sure what your constraints are. If client side, consider mapping your array or modifying object prior to binding or looping.

    – dward
    Nov 18 '18 at 3:19













  • Thanks again @dward. because I'm new to this I wasn't entirely clear what code to put where. Marcos Casagrande's answer below got be on the right track.

    – SueJStevens
    Nov 18 '18 at 19:21











  • No need to exclaim that you're new, we all start somewhere. :)

    – dward
    Nov 19 '18 at 16:15



















  • This might be helpful... momentjs.com/docs/#/displaying/difference

    – dward
    Nov 18 '18 at 2:53











  • @dward, Thank you. What I'm having a challenge with is using moment.js with Handlebars.

    – SueJStevens
    Nov 18 '18 at 3:17











  • Are you not able to do the comparison or diff on the server? What if you mutated or mapped the array before the handlebars loop? Not sure what your constraints are. If client side, consider mapping your array or modifying object prior to binding or looping.

    – dward
    Nov 18 '18 at 3:19













  • Thanks again @dward. because I'm new to this I wasn't entirely clear what code to put where. Marcos Casagrande's answer below got be on the right track.

    – SueJStevens
    Nov 18 '18 at 19:21











  • No need to exclaim that you're new, we all start somewhere. :)

    – dward
    Nov 19 '18 at 16:15

















This might be helpful... momentjs.com/docs/#/displaying/difference

– dward
Nov 18 '18 at 2:53





This might be helpful... momentjs.com/docs/#/displaying/difference

– dward
Nov 18 '18 at 2:53













@dward, Thank you. What I'm having a challenge with is using moment.js with Handlebars.

– SueJStevens
Nov 18 '18 at 3:17





@dward, Thank you. What I'm having a challenge with is using moment.js with Handlebars.

– SueJStevens
Nov 18 '18 at 3:17













Are you not able to do the comparison or diff on the server? What if you mutated or mapped the array before the handlebars loop? Not sure what your constraints are. If client side, consider mapping your array or modifying object prior to binding or looping.

– dward
Nov 18 '18 at 3:19







Are you not able to do the comparison or diff on the server? What if you mutated or mapped the array before the handlebars loop? Not sure what your constraints are. If client side, consider mapping your array or modifying object prior to binding or looping.

– dward
Nov 18 '18 at 3:19















Thanks again @dward. because I'm new to this I wasn't entirely clear what code to put where. Marcos Casagrande's answer below got be on the right track.

– SueJStevens
Nov 18 '18 at 19:21





Thanks again @dward. because I'm new to this I wasn't entirely clear what code to put where. Marcos Casagrande's answer below got be on the right track.

– SueJStevens
Nov 18 '18 at 19:21













No need to exclaim that you're new, we all start somewhere. :)

– dward
Nov 19 '18 at 16:15





No need to exclaim that you're new, we all start somewhere. :)

– dward
Nov 19 '18 at 16:15












1 Answer
1






active

oldest

votes


















2














You can achieve what you want with a few lines of code:



All you need is: dateA.diff(dateB, 'days'));






moment.suppressDeprecationWarnings = true;

Handlebars.registerHelper('days-diff', date => {
return Math.abs(moment().diff(moment(date), 'days'));
});

const template = Handlebars.compile(`
Until 12/10/2018: {{days-diff "12/10/2018"}}
Until 12/25/2018: {{days-diff "12/25/2018"}}
Until 12/25/2019: {{days-diff "12/25/2019"}}
`);

console.log(template());

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Handlebars</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
<body>
</body>
</html>








share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53357416%2fgetting-specific-number-of-days-with-moment-js-node-npm-and-handlbars%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    You can achieve what you want with a few lines of code:



    All you need is: dateA.diff(dateB, 'days'));






    moment.suppressDeprecationWarnings = true;

    Handlebars.registerHelper('days-diff', date => {
    return Math.abs(moment().diff(moment(date), 'days'));
    });

    const template = Handlebars.compile(`
    Until 12/10/2018: {{days-diff "12/10/2018"}}
    Until 12/25/2018: {{days-diff "12/25/2018"}}
    Until 12/25/2019: {{days-diff "12/25/2019"}}
    `);

    console.log(template());

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Handlebars</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
    <body>
    </body>
    </html>








    share|improve this answer




























      2














      You can achieve what you want with a few lines of code:



      All you need is: dateA.diff(dateB, 'days'));






      moment.suppressDeprecationWarnings = true;

      Handlebars.registerHelper('days-diff', date => {
      return Math.abs(moment().diff(moment(date), 'days'));
      });

      const template = Handlebars.compile(`
      Until 12/10/2018: {{days-diff "12/10/2018"}}
      Until 12/25/2018: {{days-diff "12/25/2018"}}
      Until 12/25/2019: {{days-diff "12/25/2019"}}
      `);

      console.log(template());

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <title>Handlebars</title>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
      <body>
      </body>
      </html>








      share|improve this answer


























        2












        2








        2







        You can achieve what you want with a few lines of code:



        All you need is: dateA.diff(dateB, 'days'));






        moment.suppressDeprecationWarnings = true;

        Handlebars.registerHelper('days-diff', date => {
        return Math.abs(moment().diff(moment(date), 'days'));
        });

        const template = Handlebars.compile(`
        Until 12/10/2018: {{days-diff "12/10/2018"}}
        Until 12/25/2018: {{days-diff "12/25/2018"}}
        Until 12/25/2019: {{days-diff "12/25/2019"}}
        `);

        console.log(template());

        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="utf-8">
        <title>Handlebars</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
        <body>
        </body>
        </html>








        share|improve this answer













        You can achieve what you want with a few lines of code:



        All you need is: dateA.diff(dateB, 'days'));






        moment.suppressDeprecationWarnings = true;

        Handlebars.registerHelper('days-diff', date => {
        return Math.abs(moment().diff(moment(date), 'days'));
        });

        const template = Handlebars.compile(`
        Until 12/10/2018: {{days-diff "12/10/2018"}}
        Until 12/25/2018: {{days-diff "12/25/2018"}}
        Until 12/25/2019: {{days-diff "12/25/2019"}}
        `);

        console.log(template());

        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="utf-8">
        <title>Handlebars</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
        <body>
        </body>
        </html>








        moment.suppressDeprecationWarnings = true;

        Handlebars.registerHelper('days-diff', date => {
        return Math.abs(moment().diff(moment(date), 'days'));
        });

        const template = Handlebars.compile(`
        Until 12/10/2018: {{days-diff "12/10/2018"}}
        Until 12/25/2018: {{days-diff "12/25/2018"}}
        Until 12/25/2019: {{days-diff "12/25/2019"}}
        `);

        console.log(template());

        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="utf-8">
        <title>Handlebars</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
        <body>
        </body>
        </html>





        moment.suppressDeprecationWarnings = true;

        Handlebars.registerHelper('days-diff', date => {
        return Math.abs(moment().diff(moment(date), 'days'));
        });

        const template = Handlebars.compile(`
        Until 12/10/2018: {{days-diff "12/10/2018"}}
        Until 12/25/2018: {{days-diff "12/25/2018"}}
        Until 12/25/2019: {{days-diff "12/25/2019"}}
        `);

        console.log(template());

        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="utf-8">
        <title>Handlebars</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
        <body>
        </body>
        </html>






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 18 '18 at 4:24









        Marcos CasagrandeMarcos Casagrande

        12.4k32539




        12.4k32539






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53357416%2fgetting-specific-number-of-days-with-moment-js-node-npm-and-handlbars%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Guess what letter conforming each word

            Port of Spain

            Run scheduled task as local user group (not BUILTIN)