>我在 ejs 中显示日期
<%= new Date();%>
它给我结果
星期二 二月 02 2016 16:02:24 GMT+0530 (IST)
但我需要显示为
19th 一月, 2016
如何在 ejs 中执行此操作?
您可以使用时刻
在您的控制器中,
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
你不需要 moment js,你可以简单地使用它
<%= new Date().getFullYear();%>
帖子很旧,但以防有人遇到这个问题。
您可以消除安装时刻并编写一小行代码。添加 .toDateString() 将在 ejs 中为您提供上述格式。
但是,时刻用于更详细的日期,例如日,月或年等...
为了更好地管理代码,您可以在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/。希望这会有所帮助。
你可以这样做:
<%= moment(user.date).format( 'MMM-DD-YYYY') %>
此页面上大多数答案的问题在于,它们将使用服务器的区域设置来格式化日期,但您可能希望它们以用户的区域设置呈现。 例如,如果您的服务器位于弗吉尼亚州,则您的日期将以东部时间的英语显示,但其他国家/地区的用户可能希望以不同的方式显示日期。
以下代码片段将使用用户的区域设置呈现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
// 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
<h1>
<%= new Date().getDate() %> <%= new Date().toLocaleString('default', {month: 'long'}); %>,<%= new Date().getFullYear(); %>
</h1>