首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用luxon库显示与给定时间相关的时间

使用luxon库显示与给定时间相关的时间
EN

Stack Overflow用户
提问于 2018-12-11 05:17:05
回答 1查看 6.6K关注 0票数 10

luxon是否支持相对于给定时间显示时间的功能?

Moment有“日历时间”功能:

https://momentjs.com/docs/#/displaying/calendar-time/

代码语言:javascript
复制
moment().calendar(null, {
   sameDay: '[Today]',
   nextDay: '[Tomorrow]',
   nextWeek: 'dddd',
   lastDay: '[Yesterday]',
   lastWeek: '[Last] dddd',
   sameElse: 'DD/MM/YYYY'
});

我能用luxon实现同样的效果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 08:34:11

在版本1.9.0中,您可以使用toRelativeCalendar

返回这个日期相对于今天的字符串表示,例如“昨天”或“下个月”平台支持Intl.RelativeDateFormat

代码语言:javascript
复制
const DateTime = luxon.DateTime;

const now = DateTime.local();
// Some test values
[ now,
  now.plus({days: 1}),
  now.plus({days: 4}),
  now.minus({days: 1}),
  now.minus({days: 4}),
  now.minus({days: 20}),
].forEach((k) => {
  console.log( k.toRelativeCalendar() );
});
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/luxon@1.10.0/build/global/luxon.js"></script>

1.9.0版本之前,在Luxon中没有calendar()等效项。

For Moment users手册页在DateTime method equivalence => Output => Humanization一节中说明:

Luxon不支持这些,而且在Relative Time Format提案进入浏览器之前也不会支持。

代码语言:javascript
复制
Operation       | Moment     | Luxon
---------------------------------------------------------------------------------------
"Calendar time" | calendar() | None (before 1.9.0) / toRelativeCalendar() (after 1.9.0)

如果需要,您可以自己编写一些代码,这里是一个自定义函数示例,其输出与moment的calendar()类似

代码语言:javascript
复制
const DateTime = luxon.DateTime;

function getCalendarFormat(myDateTime, now) {
  var diff = myDateTime.diff(now.startOf("day"), 'days').as('days');
  return diff < -6 ? 'sameElse' :
    diff < -1 ? 'lastWeek' :
    diff < 0 ? 'lastDay' :
    diff < 1 ? 'sameDay' :
    diff < 2 ? 'nextDay' :
    diff < 7 ? 'nextWeek' : 'sameElse';
}

function myCalendar(dt1, dt2, obj){
  const format = getCalendarFormat(dt1, dt2) || 'sameElse';
  return dt1.toFormat(obj[format]);
}

const now = DateTime.local();
const fmtObj = {
   sameDay: "'Today'",
   nextDay: "'Tomorrow'",
   nextWeek: 'EEEE',
   lastDay: "'Yesterday'",
   lastWeek: "'Last' EEEE",
   sameElse: 'dd/MM/yyyy'
};

// Some test values
[ now,
  now.plus({days: 1}),
  now.plus({days: 4}),
  now.minus({days: 1}),
  now.minus({days: 4}),
  now.minus({days: 20}),
].forEach((k) => {
  console.log( myCalendar(now, k, fmtObj) );
});
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/luxon@1.8.2/build/global/luxon.js"></script>

这段代码的灵感来自于moment ,它绝对可以改进。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53713772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档