2015-12-20 284 views
2

你好家伙我只是在学习Js,而我有一个问题,那就是差异两个日期。我想计算当前日期和日历之间的差异。用户应该选择任何你想在日历上的日期。我简单的代码如下,我需要改进它感谢所有的回应。日期差异Javascript

<!DOCTYPE html> 
<html> 
<head> 
<title>Page Title</title> 

<script> 

var selectedDateFromCalendar = new Date(); 
selectedDateFromCalendar = document.getElementById('mydate').value; 

var currentdate = new Date(); 
currentdate = document.getElementById("current").value; 

var diff = selectedDateFromCalendar - currentdate ; 
alert(diff); 

</script> 
</head> 

<body> 
<p id="current"></p> 
<input type="date" id="myDate"> 

</body> 
</html> 
+0

的可能的复制[获取在JavaScript 2个日期之间的差异?(http://stackoverflow.com/questions/3224834/get-difference-between-2-dates-in- javascript) – madox2

+0

不需要var selectedDateFromCalendar = new Date()然后将其设置为下一行输入字段的值。只需执行此操作“var selectedDateFromCalendar = document.getElementById('mydate')。value;”。但是,您必须确保输入字段包含正确的日期。有几种方法,让我们知道你是否需要一些帮助。 – Will

+0

我看到“在JavaScript中获取2个日期之间的差异?”的问题,但我的问题有一些差异。我的问题中有未定义的日期。在那个问题里已经定义了 – user5695111

回答

1

其中有相当一些错误,我固定的他们都在这里:

如果你不能了解一些这方面请随时发表评论。

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Page Title</title> 
 
</head> 
 

 
<body> 
 
    <p id="current">2015-12-20</p> 
 
    <input type="date" id="myDate" value="2015-12-25"> 
 

 

 
    <script> 
 
    document.getElementById('myDate').onchange = function() { 
 
     var selectedDateFromCalendar = this.value; 
 

 
     var currentdate = new Date(); 
 
     document.getElementById("current").textContent = currentdate.toUTCString(); 
 

 
     var diff = new Date(selectedDateFromCalendar) - currentdate; 
 
     var days = diff/1000/60/60/24 
 
     alert(days + " days"); // or use Math.floor(days) 
 
    } 
 
    </script> 
 
</body> 
 

 
</html>

+0

你的回答应该包括为什么OP有他们的问题,以及你的代码如何或为什么修复它。只是提供代码不是很有帮助。 – RobG

+0

谢谢你的回复。但我的问题有点不一样。日历中应该有未定义的日期。无论你想要什么,用户都应该选择日期。另外我怎样才能将毫秒转换为一天? – user5695111

+0

@ user5695111不在问题中,但我会修改代码,一秒钟 – CoderPi

0
var selectedDateFromCalendar = new Date(); 
selectedDateFromCalendar = document.getElementById('mydate').value; 

你似乎是试图建立selectedDateFromCalendar的类型,但JavaScript的变量没有类型,值吗,所以只分配值。

表单控件的值始终是一个字符串,因此即使您最初将Date指定为值,selectedDateFromCalendar现在是一个字符串。

var diff = selectedDateFromCalendar - currentdate ; 

这试图减去另一个字符串。它在工作中可以将字符串转换为数字(例如'5' - '3'),但不适用于其他类型的字符串。

由于从表单输入返回的值是一个字符串,因此必须对其进行解析。 永远不要使用Date.parse或Date构造函数来解析字符串。我无法强调这一点,只是不这样做。

你应该指明你想要的字符串格式。然后,手动解析字符串(一个库可以帮助但不是必须的)例如

// Parse and validate a string in DMY format 
 
function parseDMY(s) { 
 
    var b = s.split(/\D/); 
 
    var d = new Date(b[2], --b[1], b[0]); 
 
    return d && d.getMonth() == b[1]? d : new Date(NaN); 
 
} 
 

 
// Get the date from a form and subtract from today's date 
 
function dateDiff(idIn, idOut) { 
 
    var d = parseDMY(document.getElementById(idIn).value); 
 
    var result; 
 
    if (isNaN(d)) { 
 
    result = 'Invalid date'; 
 
    } else { 
 
    result = d - new Date(); // difference in milliseconds 
 
    } 
 
    document.getElementById(idOut).textContent = result; 
 
}
<label for="starDate">Start date (dd/mm/yyyy)<input id="startDate" name="startDate" value="25/12/2015"></label> 
 
<br> 
 
<button onclick="dateDiff('startDate','result')">Get date diff</button> 
 
<div id="result"></div>

+0

感谢您的回复。但我的问题有点不同。您定义开始日期。我的问题是,没有任何定义的日期用户应该选择任何你想要的。 – user5695111

+0

@ user5695111-你可以在输入中输入你喜欢的任何日期,为方便起见,该值作为初始值。请不要叫我“人”。 – RobG