2013-04-09 36 views
0

我正在處理一個窗體,需要自動計算表單提交時的格式('MMDDYYYY'),然後點擊兩個鏈接中的一個鏈接,計算出最接近的第一天即將到來的月份,以及接下來的最近的第15天。如何在Javascript中將日期前移到指定日期?

我已經創建了一個腳本,它將日期輸出並將其輸出到我需要格式的變量中,但我需要幫助計算前滾。

這裏我想我需要的邏輯的例子:

如果當前日期是04092013,標有「未來一個月的首屆」一個按下按鈕的05012013變量值將被計算。

如果當前日期爲04092013,則在一個按鈕上標記爲「月15日」,將計算變量值04152013。

如果當前日期爲04162013或截至當月月底的任何日期,則在標有「月15日」的按鈕上按下時,將計算變量值05152013。

+1

看一看在['Date'對象(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date),特別是['setDate'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setDate)和['setMonth']( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMonth)方法.. – 2013-04-09 22:39:20

回答

0

看Date對象,它應該提供你所需要的:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

例如像這樣關於你的第2個按鈕:

$(function() { 
    var date = new Date(2013, 10, 24); 

    $("#date").html(date.toString()); 
    $("#date1").html((new Date(date.getYear(), date.getMonth()+1, 1)).toString()); 
    $("#date2").html((new Date(date.getYear(), date.getMonth()+1, 15)).toString()); 
}); 

(雖然我敢肯定如果您仔細查看日期文檔,有更簡單的方法來執行此操作)

+0

謝謝。這是一個有用的鏈接。我會看看能否從那裏收集一些知識。 – user2263830 2013-04-10 18:52:34

+0

這工作。我只是應用了我已經編寫的腳本來重新格式化日期對象的輸出,並且我有我的答案。 – user2263830 2013-04-10 19:35:37

0

下面是一個示例。如果你想把它作爲一個字符串,你必須根據需要在最後格式化它(使用UTC)。

如果您輸入的日期與您要求的日期號碼相同,則它會返回同一天,而不會向前移動一個月。

var date_string = '04092013'; 
       // MMDDYYYY 

function nextNthOfMonth(date_string, n) { 
    var date; 
    // n to Int, default 1 
    n = (+n || 1); 
    // date_string to ISO 8601 
    date_string = // "yyyy-MM-ddTHH:mm:ssZ" 
      date_string.slice(4) 
     + '-' + date_string.slice(0, 2) 
     + '-' + date_string.slice(2, 4) 
     + 'T00:00:00Z'; 
    // construct date object 
    date = new Date(date_string); 
    // fix to desired date 
    if (n < date.getUTCDate()) { // adjust for month if req. 
     date.setUTCMonth(date.getUTCMonth() + 1); 
    } 
    date.setUTCDate(n); 
    return date; // or format as desired 
} 

nextNthOfMonth(date_string, 1); 
// Wed May 01 2013 01:00:00 GMT+0100 (GMT Daylight Time) 
nextNthOfMonth(date_string, 15); 
// Mon Apr 15 2013 01:00:00 GMT+0100 (GMT Daylight Time) 
0

嘗試

function getDate() { 
    var s = document.getElementById('date').value; 
    if(s){ 
     return new Date(s.substring(4), parseInt(s.substring(2, 4), 10) - 1, s.substring(0, 2)) 
    } 
} 

function comingDate(date, day){ 
    date = new Date(date); 
    var cday = date.getDate(); 
    date.setDate(day); 
    if(cday >= day){ 
     date.setMonth(date.getMonth() + 1) 
    } 
    return date 
} 

function f15(){ 
    var d = getDate(); 
    var next = comingDate(d, 15); 
    console.log(next) 
} 

function f1(){ 
    var d = getDate(); 
    var next = comingDate(d, 1); 
    console.log(next) 
} 

演示:Fiddle

+0

謝謝阿倫。我在jFiddle中給了這個嘗試,它似乎不工作? – user2263830 2013-04-10 18:50:53

0

既然你知道你的日期格式,拆分輸入部分:

var dateStr = '04092013' 
var month = dateStr.substr(0,2); 
var day = dateStr.substr(2,2); 
var year = dateStr.substr(4,4); 

將構建一個新的日期基礎關於你想要設定的規則:

var newDate; 
switch(rule) 
{ 
    case 'rule1': 
    newDate = new Date(year, month, 1);//first month is 0 
    break; 
    case 'rule2': 
    newDate = new Date(year, month, 15);//first month is 0 
    break; 
} 
  • 注意檢查當天是大於15
相關問題