2016-08-27 24 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>

相關問題