我有这段代码:
<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。
答案 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()
而不是months
。
d.getDate
需要d.getDate()
。
附加说明:getMonth()
方法返回0-11,即1月为0,12月为11。您可能需要调整以进行检查。
答案 3 :(得分:0)
您只需对代码进行一些更改:
Date对象已经有getMonth()方法用它来发布月份
var retVal = d.getDate()+''+ months [d.getMonth()] +''+ d.getFullYear();
建议::
以下是完整的代码:
<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;
}