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



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

最新更新