【问题标题】:Javascript Date Function Not workingJavascript日期函数不起作用
【发布时间】:2012-10-30 15:06:22
【问题描述】:

您好,我正在尝试将 31 天添加到“myDate”,即当前日期。它应该让日期加上 31 天,然后 convertDate 函数应该将其转换为“2012 年 11 月 31 日”之类的东西。但它不起作用。有谁知道为什么?

这里是主要功能...

function process (infoarray) {
  var myDate = new Date();
  //var final = convertDate(myDate);

  var length = infoarray.length;
  var final_string;
  for (var b = 0; b < length; b++) {
    if (b == 0) {
      if (infoarray[b][3] == 'After') {
        final_string = '<b>' + infoarray[b][3] + '&nbsp;' + infoarray[b][1] + '</b><br/>' + infoarray[b][0] + '<br/>';
      } else {
        final_string = '<b>' + infoarray[b][1] + '&nbsp;' + infoarray[b][3] + '&nbsp;' + infoarray[b][2] + '</b><br/>' + infoarray[b][0] + '<br/>';
      }
    } else {
      if (infoarray[b][3] == 'After') {

        final_string = final_string + '<br/><b>' + infoarray[b][3] + '&nbsp;' + convertDate(myDate.setDate(myDate.getDate() + 31)) + '</b><br/>' + infoarray[b][0] + '<br/>';
      } else {
        final_string = final_string + '<br/><b>' + infoarray[b][1] + '&nbsp;' + infoarray[b][3] + '&nbsp;' + infoarray[b][2] + '</b><br/>' + infoarray[b][0] + '<br/>';
      }
    }
  }
  return final_string;
}

这是我从上面的函数中关注的那一行...

final_string = final_string + '<br/><b>' + infoarray[b][3] + '&nbsp;' + convertDate(myDate.setDate(myDate.getDate() + 31)) + '</b><br/>' + infoarray[b][0] + '<br/>';

这里是 convertDate 函数...

function convertDate(d) {
    var day = d.getDate();
    if (day < 10) {
        day = '0' + day;
    }
    var year = d.getFullYear();
    var month = d.getMonth();
    var months=['Jan','Feb','Mar','Apr','May','June','July','Aug','Sep','Oct', 'Nov','Dec'];
    var currentMonth = months[month];
    return (currentMonth + ' ' + day + ', ' + year);
}

【问题讨论】:

  • 为什么不起作用?控制台中有任何错误消息吗?输出是什么?

标签: javascript html function date


【解决方案1】:

myDate.setDate(...) 修改了Date 实例的值,但不返回任何内容。
您需要先调用setDate,然后将变量传递给您的函数。

【讨论】:

  • 我试过这个 myDate.setDate(convertDate(myDate.getDate() + 31)) 但它也没有用..
  • 你知道修复会是什么样子吗?
  • convertDate(myDate.setDate(myDate.getDate() + 31)) 到 myDate.setDate(myDate.getDate() + 31);转换日期(我的日期)
【解决方案2】:

这里。 先计算再调用

DEMO;

var myDate = new Date();
myDate.setDate(myDate.getDate()+31);

final_string = final_string + '<br/><b>' +
infoarray[b][3] + '&nbsp;' + 
convertDate(myDate) + '</b><br/>' + infoarray[b][0] + '<br/>';

或者添加到函数中:

.... convertDate(myDate,31) + ....

function convertDate(d,offset) {
 if ( offset ) d.setDate(d.getDate()+offset);
 var day = d.getDate();

 if (day < 10) {
    day = '0' + day;
 }
 var year = d.getFullYear();
 var month = d.getMonth();
 var months=['Jan','Feb','Mar','Apr','May','June','July','Aug','Sep','Oct', 'Nov','Dec'];
 var currentMonth = months[month];
 return (currentMonth + ' ' + day + ', ' + year);
}

DEMO

【讨论】:

  • 我需要能够一遍又一遍地使用 myDate 作为当前日期。所以我不想永久更改它。
  • 因此在代码的这个特定部分我指出我需要获取当前日期添加任何数字(例如:31)并返回它
  • 我尝试添加这个,但没有成功... convertDate(infoarray[b][1].setDate(myDate.getDate() + 31))
  • 所以添加到转换日期function convertDate(d,offset) { if ( offset ) d.setDate(d.getDate()+offset); var day = d.getDate();
  • 你能展示一下 convertDate 函数的样子吗?
【解决方案3】:

通过使用 setDate,您可以告诉 Date 对象将天数设置为 32 到 62 之间的某个值,这没有多大意义。

添加 31 天的一个好方法是使用 getTime,它返回自 1970 年 1 月 1 日以来经过的毫秒数:

myDate.setTime( myDate.getTime()+31*24*60*60*1000 );
//31Days x 24 hours x 60 minutes x 60 seconds x 1000 msecs

【讨论】:

  • 我明白了..我如何将 convertDate 函数也应用于此?
  • 不需要。将日期设置为 62 会将 31 天添加到第 31 天,所以会起作用
  • 好吧,mdn 骗了我 (developer.mozilla.org/en-US/docs/JavaScript/Reference/…)。我查了ecma-international.org/ecma-262/5.1/#sec-15.9.1.12,你是对的。传递给 setDate 的参数不受约束
  • 我确实知道这是在欺骗您“如果您指定的参数超出预期范围,setDate 会尝试相应地更新 Date 对象中的日期信息。例如,如果您使用 0对于 dayValue,日期将设置为上个月的最后一天。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多