Moment.js - 明天,今天和昨天

时间:2016-02-16 19:52:37

标签: javascript date momentjs

我想要moment().fromNow()功能,但是当日期接近时它太精确了 - 例如。我不希望它在'3小时'但'今天'显示 - 所以基本上是'每日'精度。

我尝试使用moment().calendar()函数,如果日期差异超过1天则不会格式化

12 个答案:

答案 0 :(得分:71)

您也可以这样做以获取今天和明天以及昨天的日期

let today     = moment(new Date());

let tomorrow  = moment(new Date()).add(1,'days');

let yesterday = moment(new Date()).add(-1, 'days');

答案 1 :(得分:26)

您可以使用.fromNow自定义.calendarmoment.updateLocale方法显示日期的方式。以下代码将根据问题更改.calendar显示的方式:

moment.updateLocale('en', {
    calendar : {
        lastDay : '[Yesterday]',
        sameDay : '[Today]',
        nextDay : '[Tomorrow]',
        lastWeek : '[Last] dddd',
        nextWeek : '[Next] dddd',
        sameElse : 'L'
    }
});

基于这个问题,似乎.calendar方法更合适 - .fromNow想要有一个过去/现在的前缀/后缀,但如果你想找到您可以阅读http://momentjs.com/docs/#/customization/relative-time/上的文档。

要仅在一个地方使用它而不是覆盖语言环境,请在定义moment.updateLocale时将您选择的字符串作为第一个参数传递,然后使用该语言环境调用日历方法(例如。{{1 }})

编辑:时刻^ 2.12.0现在有moment.updateLocale('yesterday-today').calendar( /* moment() or whatever */ )方法。 updateLocaleupdateLocale似乎在功能上相同,locale尚未弃用,但更新了使用较新方法的答案。

答案 2 :(得分:24)

我将add()endOf()的组合与时刻

结合使用
//...
const today = moment().endOf('day')
const tomorrow = moment().add(1, 'day').endOf('day')

if (date < today) return 'today'
if (date < tomorrow) return 'tomorrow'
return 'later'
//...

答案 3 :(得分:11)

<强>要求:

  • 当日期更远时,请使用标准moment().fromNow()功能。
  • 当日期更近时,请显示"today""yesterday""tomorrow"等。

<强>解决方案:

// call this function, passing-in your date
function dateToFromNowDaily( myDate ) {

    // get from-now for this date
    var fromNow = moment( myDate ).fromNow();

    // ensure the date is displayed with today and yesterday
    return moment( myDate ).calendar( null, {
        // when the date is closer, specify custom values
        lastWeek: '[Last] dddd',
        lastDay:  '[Yesterday]',
        sameDay:  '[Today]',
        nextDay:  '[Tomorrow]',
        nextWeek: 'dddd',
        // when the date is further away, use from-now functionality             
        sameElse: function () {
            return "[" + fromNow + "]";
        }
    });
}

注意:从版本2.14.0开始,日历功能的格式参数可以是回调,请参阅http://momentjs.com/docs/#/displaying/calendar-time/

答案 4 :(得分:10)

在Moment.js中,from()方法具有您正在寻找的每日精确度:

var today = new Date();
var tomorrow = new Date();
var yesterday = new Date();
tomorrow.setDate(today.getDate()+1);
yesterday.setDate(today.getDate()-1);

moment(today).from(moment(yesterday)); // "in a day"
moment(today).from(moment(tomorrow)); // "a day ago" 

moment(yesterday).from(moment(tomorrow)); // "2 days ago" 
moment(tomorrow).from(moment(yesterday)); // "in 2 days"

答案 5 :(得分:10)

我有类似的解决方案,但允许使用区域设置:

    let date = moment(someDate);
    if (moment().diff(date, 'days') >= 1) {
        return date.fromNow(); // '2 days ago' etc.
    }
    return date.calendar().split(' ')[0]; // 'Today', 'yesterday', 'tomorrow'

答案 6 :(得分:8)

您可以使用此:


const today     = moment();

const tomorrow  = moment().add(1, 'days');

const yesterday = moment().subtract(1, 'days');

答案 7 :(得分:7)

这是我使用moment的方法:

  let today = moment().format('DD MMMM YYYY');

  let tomorrow = moment().add(1, 'days').format('DD MMMM YYYY').toString();

  let yesterday = moment().subtract(1, 'days').startOf('day').format('DD MMMM YYYY').toString();

答案 8 :(得分:5)

从2.10.5开始,支持指定每次调用的日历输出格式 有关更详细的文档,请查看Moment - Calendar

**Moment 2.10.5**
moment().calendar(null, {
  sameDay: '[Today]',
  nextDay: '[Tomorrow]',
  nextWeek: 'dddd',
  lastDay: '[Yesterday]',
  lastWeek: '[Last] dddd',
  sameElse: 'DD/MM/YYYY'
});

从2.14.0开始,日历也可以通过回调来返回值。

**Moment 2.14.0**
    moment().calendar(null, {
     sameDay: function (now) {
       if (this.isBefore(now)) {
         return '[Will Happen Today]';
       } else {
        return '[Happened Today]';
       }
       /* ... */
      }
    });

答案 9 :(得分:4)

所以这就是我最终做的事情

var dateText = moment(someDate).from(new Date());
var startOfToday = moment().startOf('day');
var startOfDate = moment(someDate).startOf('day');
var daysDiff = startOfDate.diff(startOfToday, 'days');
var days = {
  '0': 'today',
  '-1': 'yesterday',
  '1': 'tomorrow'
};

if (Math.abs(daysDiff) <= 1) {
  dateText = days[daysDiff];
}

答案 10 :(得分:1)

.subscribe(
  success => {
    this.processGetChart(success);
  },
  error => {
    this.errors = error;
    console.log('API Error: ', error);
  },
  () => {
  }
  );

答案 11 :(得分:0)

您可以使用.add()和.subtract()方法获取昨天和明天的日期。然后使用format方法仅获取日期.format(“ D / M / Y”),D代表日,M代表月,Y代表年。 Check in Moment Docs

 let currentMilli = Date.now()
 let today = Moment(currentMilli).format("D/M/Y");
 let tomorrow = Moment(currentMilli).add(1, 'days').format("D/M/Y");
 let yesterday = Moment(currentMilli).subtract(1, 'days').format("D/M/Y");

结果将是:

Current Milli - 1576693800000
today - 19/12/2019
tomorrow - 18/12/2019
yesterday - 18/12/2019