日期格式自动从' dd / mm / yyyy'到' mm / dd / yyyy'

时间:2014-06-06 09:29:54

标签: javascript arrays date

所以我有这个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会自行更改?

提前谢谢!

1 个答案:

答案 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]);
}

您还应该提供屏幕提示,告诉用户使用哪种格式。