Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中将日期向前滚动到指定的日期?_Javascript_Jquery_Date_Date Arithmetic - Fatal编程技术网

如何在Javascript中将日期向前滚动到指定的日期?

如何在Javascript中将日期向前滚动到指定的日期?,javascript,jquery,date,date-arithmetic,Javascript,Jquery,Date,Date Arithmetic,我正在处理一个表单,它需要自动计算表单以('MMDDYYYY')格式提交的日期,然后单击两个链接中的一个链接a链接,计算下个月最接近的第一天和下个月最接近的第十五天 我已经创建了一个脚本,它将日期拉入并以我需要的格式输出到一个变量,但是我需要帮助来计算前滚 下面是一个我认为我需要的逻辑示例: 如果当前日期为0409013,则按下标有“每月1日”的按钮,将计算变量值05012013 如果当前日期为0409013,则在标有“每月15日”的按钮上,将计算变量值04152013 如果当前日期为04162

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

我已经创建了一个脚本,它将日期拉入并以我需要的格式输出到一个变量,但是我需要帮助来计算前滚

下面是一个我认为我需要的逻辑示例:

如果当前日期为0409013,则按下标有“每月1日”的按钮,将计算变量值05012013

如果当前日期为0409013,则在标有“每月15日”的按钮上,将计算变量值04152013


如果当前日期为04162013或当前月底之前的任何日期,则在标有“每月15日”的按钮上,将计算05152013的变量值。

查看日期对象,它应提供您需要的:

例如,对于前两个按钮,如下所示:

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

(尽管我相信如果你仔细查看日期文档,会有更简单的方法做到这一点)

下面是一个例子。如果您希望将其作为字符串返回,则必须根据需要在末尾对其进行格式化(使用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)
var-date_字符串='0409013';
//MMDDYYYY
函数nextNthOfMonth(日期\字符串,n){
风险值日期;
//n到Int,默认值为1
n=(+n | | 1);
//符合ISO 8601的日期字符串
日期字符串=/“yyyy-MM-ddTHH:MM:ssZ”
日期字符串切片(4)
+'-'+date_string.slice(0,2)
+'-'+date_string.slice(2,4)
+‘T00:00:00Z’;
//构造日期对象
日期=新日期(日期字符串);
//定到预定日期
if(n
试试看


演示:

既然您知道日期的格式,请将输入分成几个部分:

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天

看一看具体的步骤和方法。谢谢Arun。我在JFIDLE中试了一下,但似乎不起作用?谢谢。这是一个有用的链接。我会看一看,看看是否能从那里收集到一些知识。这很有效。我只是简单地应用了我已经编写的脚本来重新格式化date对象的输出,我得到了答案。
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;
}