2016-08-27 23 views
0

我需要在我的应用程序的时刻js有以下功能。最简单的方法来找到一个日期,从另一个日期的X持续时间,在moment.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(),也不容易。

所以,大家好,如何实现这个next()previous()方法,在瞬间或js?

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

+1

结账的那一刻文档 - 通过阅读他们,看看是否能找到你需要的东西。他们几乎涵盖了所有内容。从[持续时间](http://momentjs.com/docs/#/durations/add/)部分开始。 –

+1

持续时间与add()和subtract()一起使用的[持续JavaScript中的日期](http://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript) – 4castle

+0

的可能重复不是给我我想要的结果。它也改变了原文。所以,可以用一些格式化和东西来完成。 – ISONecroMAn

回答

2

正如您在问题中所说的,您可以使用像addsubtract这样的时刻操纵函数以及clone来避免原始对象突变。

要添加自定义功能到瞬间使用moment.fn

瞬间操作函数接受'months''weeks''days'等作为参数,但在我看来,你想用'month''week''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());
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

相关问题