Firefox日期格式

时间:2016-02-24 13:20:59

标签: javascript html date

我创建了一个网页,用于计算两个日期之间的周数和天数。 在Chrome中,这个页面可以工作,并为我提供4周和2天的日期2016年1月1日和2016年1月31日的输出,但firefox给了我130周和两天的输出。 我怎样才能改变它以获得chrome的输出。 非常感谢

<html>
<head>
<title>Time Between Dates Calculator</title>
<script src="dateCalc.js"></script>
</head>
<body>
<h1>Calculate the Amount of Time Between Dates:</h1>
<form>
Enter Date 1 (mm/dd/yyyy): <input type="date" id="date1" name="date1" required> <br />
Enter Date 2 (mm/dd/yyyy): <input type="date" id="date2" name="date2" required> <br />  
<input type="submit" onclick="datecalc()" Value="Get Weeks and days">

</form>
</body>
</html>



***********************************************************************

function datecalc()
{
    firstDate = document.getElementById("date1").value;
    secondDate = document.getElementById("date2").value;
    /*window.alert(firstDate);
    window.alert(secondDate);*/
    firstDateMs = new Date(firstDate).getTime();
    secondDateMs = new Date(secondDate).getTime();

    msPerDay = 24 * 60 * 60 * 1000;
    msLeft = (secondDateMs - firstDateMs);
    daysLeft = Math.round(msLeft/msPerDay);
    weeksLeft = Math.round(daysLeft/7);
    total = (daysLeft-(weeksLeft*7))

    window.alert("The difference between these days is: " + weeksLeft + " weeks and " + total + " days.");



}

2 个答案:

答案 0 :(得分:2)

一种解决方案是在输入字符串上使用.split("/"),然后使用 new Date(year, month, day);构造函数。

在Javascript日期,1月份是0,12月份是11 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date

这将消除对日期的可能字符串解释的任何歧义。

firstDate = document.getElementById("date1").value;
secondDate = document.getElementById("date2").value;
/*window.alert(firstDate);
window.alert(secondDate);*/
firstDate.split("/");
secondDate.split("/");
firstDateMs = new Date(parseInt(firstDate[2]), parseInt(firstDate[0]) - 1, parseInt(firstDate[1])).getTime();
secondDateMs = new Date(parseInt(secondDate[2]), parseInt(secondDate[0]) - 1, parseInt(secondDate[1])).getTime();

答案 1 :(得分:0)

提交监听器应该在表单上,​​而不是提交按钮,因为可以在不单击按钮的情况下提交表单。此外,应将日期字符串手动解析为日期,因为它们取决于用户输入,验证的值。如果处理程序传递对表单的引用,它也可以使生活更容易,因此控件是通过名称而不是 getElementById 访问的。

输入类型日期不受支持,并且创建的问题比现在解决的问题多,所以最好使用类型文本(或使用您自己的日期选择器)。以下内容使用输入类型文本,并以m / d / y格式手动分析和验证字符串。

对于真实表单,最好分别验证每个日期并为无效的日期添加错误消息,以便将解析的日期回显到屏幕,以便用户可以看到代码是使用他们期望的日期(例如,1/2/2016发布时间为1月2日而不是2月1日)。

一些代码......

&#13;
&#13;
function datecalc(form) {
  var d1 = parseMDY(form.date1.value);
  var d2 = parseMDY(form.date2.value);
  var msDay = 8.64e7;
  var msWeek = msDay * 7;
  var result;
  
  // Deal with in valid input
  if (isNaN(+d1) || isNaN(+d2)) {
    result = 'Invalid date';
  } else {
  
    // Get weeks and days
    var diff = d2 - d1;
    result = (diff/msWeek | 0) + ' weeks ' + 
             Math.round((diff % msWeek)/msDay | 0) + ' days';
  }
  
  // Should return an array of say [weeks, days] and leave formatting
  // to some other function.
  form.result.value = result;
}

function parseMDY(s) {
  var b = s.split(/\D/);
  var d = new Date(b[2], --b[0], b[1]);
  return d && d.getMonth() == b[0]? d : new Date(NaN);
}
&#13;
<form onsubmit="datecalc(this); return false;">
  Enter Date 1 (mm/dd/yyyy): <input type="text" name="date1" value="3/1/2016"><br>
  Enter Date 2 (mm/dd/yyyy): <input type="text" name="date2" value="3/23/2016"><br>  
  <input type="reset"> <input type="submit" Value="Get Weeks and days"><br>
  <input type="text" name="result" readonly>
</form>
&#13;
&#13;
&#13;

我想你已经把这些日子弄清楚,以消除夏令时错误,请小心。另一种方法是从日期值中获取天数差异,而不是创建日期对象。这消除了DST的任何问题(但验证日期大约需要3行代码)。