所以我有这个javascript函数:
<script type="text/javascript">
function CompareDates(id)
{
var monName = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec");
var d = new Date(id);
var curr_date = d.getDate();
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
return (curr_date + " " + monName[curr_month] + " " + curr_year);
}
</script>
然后是这个日历标记:
<p:calendar
id="testDate"
styleClass="calendar"
pattern="d MMM, yyyy"
maxlength="10"
onchange="$(this).val(CompareDates($(this).val()))"
onfocus="$(this).mask('99/99/9999');"
>
<p:watermark for="testDate" value="mm/dd/yyyy" />
</p:calendar>
由于某些未知原因,文本框接受的默认日期格式为'mm / dd / yyyy'
例如,如果我输入“13-05-2014”,则会返回错误,指出日期无效。
如果我输入“12-05-2014”,则会返回“2014年12月5日”
我没有声明任何dateformat anywhre除了上面显示的日期选择器,'d MMM,yyyy'
在此之前,我试用并错误许多不同类型的代码尝试验证日期,但它都没有工作,所以我把它全部还原到原始代码。
上次文本框接受的日期格式是'dd / mm / yyyy',除了验证部分之外,我的javascript函数工作正常。
现在它仍然有效,但dateformat更改为'mm / dd / yyyy'。
我确实尝试使用console.log来查明错误但没有错误消息。
所以有人能告诉我并告诉我这里发生了什么?
为什么dateformat会自行更改?
提前谢谢!
答案 0 :(得分:0)
当你这样做时:
var d = new Date(id);
您实际上正在调用date.parse,这主要取决于实现。不幸的是,大多数浏览器中的默认解析器都希望字符串的格式如nn / nn / nnnn为月/日/年。
您可以通过手动解析字符串来避免这种情况。如果你的字符串是d / m / y那么:
function parseDMY(s) {
var b = s.split(/\D/);
return new Date(b[2], --b[1], b[0]);
}
您还应该提供屏幕提示,告诉用户使用哪种格式。