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

how to add if else condition into an array in javascript (edited)

本文关键字:if 添加 else 条件 数组 javascript 编辑      更新时间:2023-09-26

我有这段代码:

<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语句,以便如果date>31且months>12,日期将返回'false',就像现在一样,

它返回'NaN undefined NaN'

谁能告诉我应该在哪里以及如何添加条件?

我这样做了:

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。

可以这样做:

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
    }
}

用case:

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

id参数创建Date对象d。这样,Date d就不可能在日期和月份范围之外…所以也许你的检查是不必要的。

如果你还需要一个答案,我会说:

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

注意months是一个数组。可能你指的是d.getMonth()而不是monthsd.getDate必须是d.getDate()

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

你只需要对你的代码做一些改变:

  1. 从索引0开始更改数组值,依此类推。月[0]="1月";而不是几个月[1]="1月";
  2. 日期对象已经有getMonth()方法,使用它来发布月份

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

    1. 无需附加条件。

建议::

  1. 可以使用速记方法来压缩代码 var月= new Array("1","2","3"、"4月"、"可能"、"君"、"7"、"8月","9",10月,11月,12月),
  2. 我不明白你为什么用(id)…我认为这是不必要的。但如果遗漏了什么,请告诉我。我很乐意回答。

完整代码如下:

<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>

我不清楚你在问什么。

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

然而,使用空格作为分隔符并不常见,"-"answers"/"更常用。

如前所述,一旦id转换为日期,它将始终适合有效日期的参数。如果不能转换为有效日期,则计算结果为NaN

然而,如果id是一个字符串(它不应该是,见上文),如"23/5/2014",那么你可以使用如何验证日期的答案来验证它。

编辑

所以看起来id是一个字符串。不能为Date指定格式。解析,它可能接受特定的字符串,但它通常是不可靠的,所以手动解析字符串。假设是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

将根据是否以d/m/y格式传递有效日期返回true或false。对于某些浏览器,如果年份从1到99,上述操作将失败,因为它们假设这些日期是20世纪,并将其转换为1901到1999。

如果还希望处理公元1世纪的日期,请使用:

// 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;
}