如何在Javascript中将日期前移到指定日期?

问题描述:

我正在处理一个窗体,需要自动计算表单提交时的格式('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

看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

下面是一个示例。如果你想把它作为一个字符串,你必须根据需要在最后格式化它(使用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) 

尝试

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

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

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