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> © 2018 FreshOceans </p>
</div>
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()