javascript - moment.js 根据差异更改格式
问题描述
我想遵循与内容发布网站相同的结构,其中新帖子遵循以下内容:
(seconds/minutes/hours ago), (yesterday), (days ago), (MMM Do YY)
.
我将如何重新排列 JS 以遵循这种格式,然后(MMM Do YY)
说,3 days
?
// iterates over every element with the .js-time-ago css class
$('.date').each(function() {
var $this = $(this),
textDate = $this.data('date'), // gets the date from the date attribute
postedDate = moment(textDate, ['DDMMMMY', 'MMMMDDY']).format(), // formats the date in a formate that will continue to be supported by Moment JS
today = moment().format(), // gets today's date
timeSince = moment(today, 'YYYY-MM-DD').diff(moment(postedDate, 'YYYY-MM-DD'), 'days'); // sets up the dates to be compared so that we can get a number for if statement below
if (timeSince >= 0) $this.text(moment(postedDate).fromNow());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
<div class="date" data-date="01 April 2018"></div>
<div class="date " data-date="26 May 2018"></div>
<div class="date" data-date="27 May 2018"></div>
解决方案
你实际上真的很接近 - 你只需要在timeSince
你想要的范围内实现条件逻辑,在你的例子中是 3 天。
如果您简单地使用三元(甚至是 IF-ELSE)切换if
语句,检查值是否小于或等于 3,您可以获得所需的结果。这是代替您当前使用的三元语句:timeSince
if
(timeSince <= 3) ? $this.text(moment(postedDate).fromNow()) : $this.text(moment(postedDate).format('MMM Do YY'));
三元/条件语句首先需要一个条件来评估 - 在您的情况下,是否timeSince
小于或等于 3 天前。如果条件为真,则执行第一个表达式——在这种情况下,.date
使用 Moment 的x ago
格式格式化来自选择器的值。如果条件为假,在此示例中表示超过 3 天前,则它使用 Moment 使用MMM Do YY
格式来格式化文本。
在此处完成 CodePen 示例:https ://codepen.io/anon/pen/zjgbmp
有关三元如何帮助保持代码简洁的示例,以下是使用相同的解决方案IF-ELSE
:
if (timeSince <= 3) {
$this.text(moment(postedDate).fromNow());
}
else {
$this.text(moment(postedDate).format('MMM Do YY'));
}
推荐阅读
- beagleboneblack - Beaglebone Black:无法显示 u-boot 提示
- web - URL 中的版本查询以绕过浏览器缓存
- c# - C# 中的 SOLID 原则 - 如何实现更具体的接口
- postgresql - 在同一列上创建 2 个索引
- java - 无法在 Java 中捕获下一行字符
- docker - Docker 无法从其他容器访问已发布的端口
- python - 我们如何创建一个可重用的块,在单个模型中共享架构,但在 Keras 的单个模型中学习不同的权重集?
- c# - Blazor 组件中的渲染顺序
- android - 仅当用户滚动时如何在另一个布局上滚动
- javascript - 将 PostgresSQL 查询转换为 Knex.js