Как отобразить сообщение в зависимости от времени суток? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь создать сайт, на котором есть приветственное сообщение, но оно меняется в зависимости от времени суток. Пример: Доброе утро (2 утра - 11:59 утра), Добрый день (12:00 вечера - 4:59 вечера) Добрый вечер (5:00 вечера - 1:59 утра). Как мне сделать это в Node.JS с 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.');
});

Вид:

<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>

1 Ответ

0 голосов
/ 31 августа 2018

Вам нужно написать функцию, которая возвращает правильное сообщение в зависимости от времени. Это довольно просто.

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()
  });
});

Тогда просто добавьте {{modt}} на свою веб-страницу.

В любом случае, может быть, вам нужно немного изменить currentTime, чтобы получить только время, а не дату.

Подобный вопрос у вас здесь: Как использовать Moment.JS, чтобы проверить, находится ли текущее время между 2 раза

Edit: Вы можете проверить, работает ли это только для получения времени, без даты:

moment().toDate().getTime()
...