如何在javascript(编辑)中将if else条件添加到数组中

时间:2014-05-20 02:56:55

标签: javascript arrays if-statement

我有这段代码:

<script  type="text/javascript">
function CompareDates(id)
{
var months = new Array(12);
 months[1]=  "Jan";
 months[2] = "Feb";
 months[3] = "Mar";
 months[4] = "Apr";
 months[5] = "May";
 months[6] = "Jun";
 months[7] = "Jul";
 months[8]=  "Aug";
 months[9] = "Sep";
 months[10] = "Oct";
 months[11] = "Nov";
 months[12] = "Dec";


var d = new Date(id);

var retVal =d.getDate()+' '+ months[d.getDate()]+' '+d.getFullYear()
return retVal; } 

</script>

和日历标记:

<p:calendar 
id="testDate" 
styleClass="calendar"
pattern="d MMM yyyy"
maxlength="10"
onfocus="$(this).mask('99/99/9999');"
onchange="$(this).val(CompareDates($(this).val()))"
>
<p:watermark for="testDate" value="dd/mmm/yyyy" />
</p:calendar>

我需要在其中添加if / else语句,以便如果日期> 31且月份> 12,则日期将返回&#39; false&#39;至于现在,

它返回&#39; NaN未定义NaN&#39;

有人可以告诉我在哪里以及如何添加条件?

我这样做了:

var d = new Date(id);

if (d.getDate > '31' || months > '12'){
return false;

} else {
var retVal =d.getDate()+' '+ months[d.getDate()]+' '+d.getFullYear()
return retVal; } 
}

结果是,即使日期在限制范围内,它仍然会返回false。

5 个答案:

答案 0 :(得分:1)

这将有效:

function compareDate(dateValue){
    if(arguments.length){
        date = dateValue.split("/") //when date is entered in DD/MM/YYYY format. We split days months and year
        days = date[0] //get DD
        month = date[1] //get MM
        year = date[2] //get YYYY
        d = new Date();
        total_days = new Date(d.getYear(),d.getMonth()+1,0).getDate()
        if(days > 0 && days <= total_days && month >0 && month <= 12){
            //your success message
        }else{
            //your error message like date not valid
        }
    }else{
        //no date specified
    }
}

答案 1 :(得分:0)

用案例做:

switch (d) {
case 29:
    alert (29 days);
    break;
case 30:
    alert (30 days);
    break;
case 31:
    alert (31 days);
    break;
}

答案 2 :(得分:0)

您从Date参数创建了d对象id。通过这种方式,日期d不可能超出日期和月份范围......所以可能您的检查不是必需的。

万一你还需要答案,我会说:

if (d.getDate > '31' || months > '12'){
return false;
} else { //...

请注意months是一个数组。可能你的意思是d.getMonth()而不是monthsd.getDate需要d.getDate()

附加说明:getMonth()方法返回0-11,即1月为0,12月为11。您可能需要调整以进行检查。

答案 3 :(得分:0)

您只需对代码进行一些更改:

  1. 从索引0开始更改数组值,依此类推。 months [0] =“Jan”; 而非月份[1] =“Jan”;
  2. Date对象已经有getMonth()方法用它来发布月份

    var retVal = d.getDate()+''+ months [d.getMonth()] +''+ d.getFullYear();

    1. 无需额外条件。
  3. 建议::

    1. 您可以使用速记方法来压缩代码 var months = new Array(“Jan”,“Feb”,“Mar”,“Apr”,“May”,“Jun”,“Jul”,“Aug”,“Sep”,“Oct”,“ Nov“,”Dec“);
    2. 我不明白你为什么使用(id)......我相信这不是必需的。但如果错过任何东西,请告诉我。很乐意回答。
    3. 以下是完整的代码:

      <script  type="text/javascript">
      CompareDates();
      function CompareDates()
      {
      var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul","Aug","Sep","Oct","Nov","Dec");
      var d = new Date();
      var retVal =d.getDate()+' '+ months[d.getMonth()]+' '+d.getFullYear();
      alert(retVal);
      return retVal; 
      } 
      
      </script>
      

答案 4 :(得分:0)

目前还不清楚你在问什么。

> function CompareDates(id) {

什么是 id ?它是字符串还是时间值?按照惯例,以大写字母开头的函数名称保留给构造函数,因此最好使用:

function compareDates() {

此外,这似乎没有比较日期,名称是否仍然合适?或者它可能正在进行中。 : - )

> var months = new Array(12);
> months[1]= "Jan";
  ...
> months[12] = "Dec";

考虑使用数组文字。您似乎正在尝试将Date对象月份数转换为英语月份缩写。在这种情况下,将数组归零(正如其他人建议的那样):

var months = ['Jan','Feb','Mar','Apr','May','Jun',
              'Jul','Aug','Sep','Oct','Nov','Dec'];

> var d = new Date(id);

希望 id 是一个时间值,因为让Date构造函数解析字符串在浏览器中存在问题且不一致。我假设它正在创建一个合适的Date对象。

> var retVal =d.getDate() + ' ' + months[d.getDate()] + ' ' + d.getFullYear()

获取适当的月份名称:

var retVal = d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear();
然而,使用空格作为分隔符并不常见,&#34; - &#34;和&#34; /&#34;更常见。

如前所述,一旦 id 转换为Date,它将始终适合有效日期的参数。如果无法将其转换为有效日期,则会评估为NaN

但是,如果 id 是一个字符串(并且不应该如上所述),例如&#34; 23/5/2014&#34;然后你可以使用How to validate a date的答案对其进行清理。

修改

所以似乎 id 是一个字符串。您无法为 Date.parse 指定格式,它可能会接受特定的字符串,但它通常不可靠,因此请手动解析字符串。假设它是d / m / y格式:

// Expects d/m/y
function parseDMY(s) {
  var b = s.split(/\D/);
  return new Date(b[2], --b[1], b[0]);
}

可以使用以下方式验证日期:

// Expects d/m/y
function isValidDate(s) {
  var b = s.split(/\D/);
  var d = parseDMY(s);
  return !!d && d.getFullYear() == b[2] && d.getDate() == b[0];
}

console.log(isValidDate('29/2/2014')); // false
console.log(isValidDate('29/2/2016')); // true

以上将返回true或false,具体取决于是否以d / m / y格式传递有效日期。对于某些浏览器,如果年份从1到99,则上述情况将失败,因为他们假设这些日期是20世纪并使它们成为1901年至1999年。

如果您还要处理第一世纪的日期,请使用:

// Expects d/m/y
function parseDMY(s) {
  var b = s.split(/\D/);
  var d = new Date();
  d.setHours(0,0,0,0);
  d.setFullYear(b[2], --b[1], b[0]);
  return d;
}