Search code examples
node.jsexpresshandlebars.jsexpress-handlebars

How to display message dependent on time of day?


I am trying to create a website in which has a welcome message, but changes dependent on the time of day. Ex: Good Morning (2am - 11:59AM), Good Afternoon (12:00pm - 4:59pm) Good Evening (5:00pm - 1:59am). How do I go about doing this in Node.JS with Handlebars.

const express = require('express');
const path = require('path');
const hbs = require('express-handlebars');
// const request = require('request');

// Init App
const app = express();

// Json File
const json = require("./data.json");

// Moment.js
var moment = require('moment');

// Load View Engine
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'layout', 
layoutsDir: __dirname + '/views/layouts/'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(express.static(__dirname+'/public'));

// Home Route
app.get('/', function(req, res){
  res.render('index', {
    title: 'Node Park',
    hotel: 'Nodemon',
    firstName: json.payload.data.Source_FirstName,
    lastname: json.payload.data.Source_LastName,
    date: moment().format('ll'),
    time: moment().format('LT'),
  });
});

// Start Server
app.listen(5000, function(){
  console.log('Port 5000 open for business.');
});

View:

<div id="body-container">
<div id="header">
    <div id="logo-content">
        <div id="logo"></div>
    </div>
    <div id="welcome">
        <p>Welcome {{ firstName }} {{ lastname }} to NODE Park.</p>
    </div>
    <div id="time-side">
        <div id="time-content">
            <p> {{ date }} <br> {{ time }} </p>
        </div>
    </div>
</div> 
{{!-- end of header --}}

<div id="background">
    <img src="images/villaView.jpg" alt="villaView">
</div>

<div id="footer">
    <p> <br> &copy; 2018 FreshOceans </p>
</div>


Solution

  • You need to write function which returns correct message depending on time. It's quite simple.

    function generateModt()
    {
        var ret = " ";
        var morning = moment('08:00am', 'hh:mma');
        var noon = moment('11:59am', 'hh:mma');
        var currentTime = moment();
    
        if(currentTime.isBefore(noon) && currentTime.isAfter(morning))
        {
          ret = "Hello, it's morning";
        }
        else... //You need to write rest of your cases
    
        return ret;
    }
    
    // Home Route
    app.get('/', function(req, res){
      res.render('index', {
        title: 'Node Park',
        hotel: 'Nodemon',
        firstName: json.payload.data.Source_FirstName,
        lastname: json.payload.data.Source_LastName,
        date: moment().format('ll'),
        time: moment().format('LT'),
        modt: generateModt()
      });
    });
    

    Then just add {{ modt }} to your webpage.

    Anyway, maybe you need to get currentTime little bit different way, to get only time, not date.

    Similar question you have here: How to use Moment.JS to check whether the current time is between 2 times

    Edit: You can check if this works for getting only time, no date:

    moment().toDate().getTime()