0

我正在处理一个表单,该表单需要自动计算以格式('MMDDYYYY')提交表单的日期,然后单击两个链接中的一个链接,计算下个月最接近的第一天,以及最近的下个月的第 15 天。

我已经创建了一个脚本,它可以提取日期并将其输出到我需要的格式的变量中,但我需要帮助来计算前滚。

这是我认为需要的逻辑示例:

如果当前日期是 04092013,则在按下标有“即将到来的 1st of Month”的按钮时,将计算变量值 05012013。

如果当前日期是 04092013,则在按下标记为“即将到来的 15 日”的按钮时,将计算变量值 04152013。

如果当前日期为 04162013 或截至当前月末的任何日期,则在按下标记为“即将到来的 15 日”的按钮时,将计算变量值 05152013。

4

4 回答 4

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());
});

(虽然我确信如果您查看日期文档,有更简单的方法可以做到这一点)

于 2013-04-09T22:42:50.403 回答
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)
于 2013-04-09T22:49:32.703 回答
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)
}

演示:小提琴

于 2013-04-09T22:51:08.250 回答
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。
于 2013-04-09T23:03:40.443 回答