ejs 中的日期时间格式化/自定义

问题描述 投票:0回答:8

我在 ejs 中显示日期

<%= new Date();%>

它给了我结果

2016 年 2 月 2 日星期二 16:02:24 GMT+0530 (IST)

但我需要显示为

2016年1月19日

如何在 ejs 中执行此操作?

ejs
8个回答
37
投票

您可以使用时刻

在您的控制器中,

var moment = require('moment');
exports.index = function(req, res) {
    res.render('index', { moment: moment });
}

在你的html中,

<html>
    <h1><%= moment().format('Do MMMM, YYYY'); %></h1>
</html>

编辑:

使用基本的JS

const suffixMap = {
  one: 'st',
  two: 'nd',
  few: 'rd',
  other: 'th',
};

const date = new Date();
const dateDay = date.getDate();
const dateMonth = date.toLocaleString('default', {month: 'long'});
const dateYear = date.getFullYear();
const pluralRule = new Intl.PluralRules('en-GB', {type: 'ordinal'});
const dateOrdinal = suffixMap[pluralRule.select(dateDay)]

const ordinalDateString = `${dateDay}${dateOrdinal} ${dateMonth}, ${dateYear}`; 
// Expected output: 25th August, 2020

(改编自这个答案

const date = new Date();
const dateDay = date.getDate();
const dateMonth = date.toLocaleString('default', {month: 'long'});
const dateYear = date.getFullYear();

// DETERMINE DATE ORDINAL
let dateOrdinal = 'th';

dateOrdinal = ([1, 21, 31].indexOf(dateDay) > -1) ? 'st' : dateOrdinal;
dateOrdinal = ([2, 22].indexOf(dateDay) > -1) ? 'nd' : dateOrdinal;
dateOrdinal = ([3, 23].indexOf(dateDay) > -1) ? 'rd' : dateOrdinal;

// FORMAT DATE AS STRING
const ordinalDateString = `${dateDay}${dateOrdinal} ${dateMonth}, ${dateYear}`; 
// Expected output: 25th August, 2020

或者,如果你可以没有序数日(th、nd、rd 等),你可以使用基本的 JS

<%= new Intl.DateTimeFormat('en-GB', { year: 'numeric', month: 'long', day: '2-digit'}).format(new Date()) %>
// Expected output: 25 August 2020

17
投票

你不需要moment js,你可以简单地使用这个

<%= new Date().getFullYear();%>


10
投票

帖子很旧,但以防万一有人遇到问题。

您可以消除安装时间并编写一小行代码。 添加 .toDateString() 将为您在 ejs 中提供上述格式。

但是,Moment 用于更详细的日期,例如日、月或年等...


4
投票

为了更好的代码管理,您可以在 app.js/server.js 中添加代码(如下)。这将在启动应用程序时将

moment
保存在
res.locals.moment
中。通过这样做,您可以从任何 ejs 页面访问
moment
变量。 应用程序.js/服务器.js:

const express = require("express");
const app = express();
const moment = require("moment");

app.use((req, res, next)=>{
    res.locals.moment = moment;
    next();
  });

某事.ejs

<p><%= moment(yourDateVariable).format('Do MMMM, YYYY')  %></p>

这里

Do
将得到
19th
。您可以在这里查看 https://momentjs.com/docs/#/displaying/format/。希望这会有所帮助。


1
投票

你可以这样做:

<%= moment(user.date).format( 'MMM-DD-YYYY') %>

1
投票

此页面上大多数答案的问题是,它们将使用 server's 区域设置格式化日期,但您可能希望它们在 user's 区域设置中呈现。例如,如果您的服务器位于弗吉尼亚州,您的日期将以东部时间的英语显示,但另一个国家/地区的用户可能希望它们以不同的方式显示。

以下代码片段将使用用户的区域设置呈现

date
。还有改进的空间,但这是一个起点:

<p>
<script type="text/javascript">
document.write(
  new Date("<%= date.toISOString() %>").toLocaleDateString()
);
</script>
</p>

这会获取服务器上的日期,将其转换为 ISO-8601 字符串,并将其插入到一个在客户端运行的小 JavaScript 片段中,以生成正确的本地化输出。

有关 toLocaleString 的更多信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString


1
投票
// I have tested this in a for loop, it seems to be ok.

<% let d = new Date(); %>
<% let day = d.getDate(); %>
<% let m = ["January", "February", "March", "April", "May", "June", "July", 
"August", "September", "October", "November", "December"]; %>
<% let month = m[d.getMonth()]; %>
<% let year = d.getFullYear(); %>
<% let newdate = day + "th " + month + ", " + year; %>
<%= newdate %> // 22th July, 2022

// You can use the if...else statement for the ordinal number

0
投票
 <h1>
  <%= new Date().getDate() %> <%= new Date().toLocaleString('default', {month: 'long'});  %>,<%= new Date().getFullYear();  %>
</h1>
© www.soinside.com 2019 - 2024. All rights reserved.