找到日期的最简单方法,从另一个日期开始的X持续时间,在moment.js

时间:2016-08-27 19:19:29

标签: javascript momentjs

对于我的应用,我需要在片刻js中具有以下功能。

var nDay = moment(2007, 0, 28).next('date'); //--> 2007-0-29T00:00:00.00
var pDay = moment(2007, 0, 28).previous('date'); //--> 2007-0-27T00:00:00.00

类似地:

.next('week'), .next('month')

并获取特定日期。

我知道momentjs有操纵方法,但使用它们是一种痛苦,因为它会改变原始方法。即使使用.clone(),也不容易。

那么大家,如何在片刻或者js中实现这个next()previous()方法?

或者,在某一天之后找到这一天的最简单方法是什么?

1 个答案:

答案 0 :(得分:2)

正如您在问题中所说,您可以使用addsubtract等时刻操作函数以及clone来避免原始对象变异。

添加自定义功能以便使用moment.fn

时刻操纵函数接受'months''weeks''days'等作为参数,而您似乎想要使用'month''week',{{ 1}},因此您需要将输入字符串转换为等效的时刻。

这里有一个工作示例:

'date'
moment.fn.next = function(unit){
  // Convert input to strings used by moment
  unit = unit === 'date' ? 'days' : unit;
  if( unit === 'month' || unit === 'week'){
    unit += 's';
  }
  
  return this.clone().add(1, unit);
}

moment.fn.previous = function(unit){
  // Convert input to strings used by moment
  unit = unit === 'date' ? 'days' : unit;
  if( unit === 'month' || unit === 'week'){
    unit += 's';
  }
  
  return this.clone().subtract(1, unit);
}

var nDay = moment([2007, 0, 28]).next('date');
var pDay = moment([2007, 0, 28]).previous('date');
var nMonth = moment([2007, 0, 28]).next('month');
console.log(nDay.format());
console.log(pDay.format());
console.log(nMonth.format());