2013-10-08 42 views
-1

我真的需要帮助来计算两个日期之间的差异,它必须是整数中的天数。这里是我的HTML和jQuery ..使用查询计算日期之间的差异

这是不工作的...该网站应该说今天的日期。然后用户会选择日期并点击“检查我们的安全记录”按钮,并在页面底部显示它已经有多少天。 jQuery的:

$(document).ready(function() { 
    $('#safetyRecord').hide(); 

var monthNames = [ "January", "February", "March", "April", "May", "June", 
"July", "August", "September", "October", "November", "December" ]; 
var dayNames= ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"] 

var newDate = new Date(); 
newDate.setDate(newDate.getDate());  
$('#today').html(dayNames[newDate.getDay()] + "," +' ' + monthNames[newDate.getMonth()]  + ' ' + newDate.getDate() + ","+ ' ' + newDate.getFullYear()); 

/* 
$(':button').click(function(){ 
var start = $('#dateOfLastAccident').val(); 
var end = $('#today'); 

var startDate = new Date(start); 
var endDate = new Date(end); 

var diff = endDate - StartDate; 

var numDays = Math.floor(diff/1000 /60 /60 /24); 
$('#daysSinceLastAccident'+ numDays)(); 
*/ 
}); 

的HTML:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>generic safety</title> 

    <link rel="stylesheet" href="L3hw.css"> 

    <!-- jQuery library hosted by Google Content Distribution Network --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
    <script src="L3hw.js"></script> 

</head> 
<body> 
    <header> 
     <img src="images/genericBanner.png" alt="Generic, Inc."> 
     <p> 
      The New Ventures Mission is to scout profitable growth opportunities in 
      relationships, both internally and externally, in emerging, mission-inclusive 
      markets, and explore new paradigms and then filter and communicate and 
      evangelize the findings. 
     </p> 
    </header> 

    <section id="main"> 
     <h1>Safety at generic company</h1> 
     <h2>Today is <span id="today">TBD</span>.<br> 
      Our last lost-work accident was on 
      <input type="date" id="dateOfLastAccident"> 
      <button type="button" id="checkRecord">Check our safety record</button> 
     </h2> 
     <h2 id="safetyRecord"> 
      It has been <span id="daysSinceLastAccident">TBD</span> days since our last lost-work accident. 
     </h2> 
    </section> <!-- end main --> 

    <footer> 
     <p id="message"> 
      <!-- (an appropriate safety message will appear here) --> 
     </p> 
     <p><img src="images/genericBullet.png" alt="*"> Generic Company - we do stuff</p> 
    </footer> 
</body> 
</html> 
+2

所有帽子都像是SHOUTING ...请不要放弃! – tjons

+2

这可能会给你一些见解':)''http://stackoverflow.com/questions/10931288/how-to-add-subtract-dates-with-javascript/10931362#10931362 –

+0

对不起,我从来没有使用过这个网站,我试图将它从代码中分离出来。我不使用日期选择器我只是在HTML中使用输入类型=日期 – user2856563

回答

0

我会建议你使用日期选择器,而且你重新思考你为什么编程。如果你没有使用正确的工具,因为它不是必需的,你不应该编程。

我觉得我不应该做的功课,但是......这里是一个粗略的想法(在正常JS,不是jQuery的):

function funC(){ 
//here is the date today... 
var d=new Date(); 
var i = getElementById("today")' 
i.InnerHTML= d; 
//here is a function for the days since the date 
var e = getElementById("dateOfLastAccident"); 
var x = d-e; 
var y = //insert your own algo to format dates 
var a = getElementById("daysSinceLastAccident"); 
a.InnerHTML = y; 
} 

请注意,这是不行的BY本身。你还有工作要做。和是的,我在嘘!

+0

谢谢我不是要求答案...只是帮助 – user2856563

+0

如果这有帮助,你是否推介大绿色检查来接受我的答案?它不会伤害,承诺... – tjons

+0

非常感谢你 – tjons

3

虽然jQuery弥补了Javascript的许多缺点,尽管Date支持是Javascript的缺点之一,但jQuery并不能帮助您处理日期。所以,你已经选择了这个工作的错误工具,就像这里其他许多人所指出的那样。

jQueryUI DatePicker如果你使用它,因为它的目的(显示一个日期选择器),并做做的这个部分你,就像刚日期间计算天数的不好,会做很多的这个要求,因为它分解比较差。

我与其他人一起质疑你为什么不使用它 - 它可能是你只是不知道它存在,或者你发现它有点怪物,并没有写得很好。这些都是有效的指责,但我警告你日期和日历是许多着名的绝望开发商之一落入。人类认为事情很简单的致命地区,计算机和现实在您将自己的方式编入细节之后很长时间会受到抨击,但时间太久了,为减少损失和感觉良好而为时已晚。

如果您所处的困境是不够的,让你相信的东西是不好当你进入的日期,日期格式,只会变得更糟,这里的an old Quora answer of mine部分:

例如,如果你告诉我系统中的所有报价在10天内到期,我可能会说很好,这很简单,并且估计到期任务为一小时。如果我估计一周这个,你会叫我疯了。

然后我尝试编码它。他们什么时候到期,在午夜,还是他们提供的时间?我如何过期 - 我能写出一个不断唤醒并过期陈旧的工作吗?当我让用户等待时,我是否等待用户检查它们并在那里过期旧报价?

然后我发现它实际上是10个工作日。什么是工作日?我如何正确推进日期,以便跳过周末?什么是假期时间表?闰年呢?什么时候是闰年? (提示:不是每4年一次,除了每100年外,并不是每4年一次)。

好的,我们将为您建立一个界面,以便维护假期计划,因为它可能会发生变化。

然后我发现你希望用户在报价到期前一天收到警告邮件。不是一天,一个工作日。在他们的时区。确保它只在工作时间内出现。

一个小时如何变成2周?

因此减少你的损失。使用jQueryUI Datepicker。

0

雅,你为什么不使用datepicker? 我不知道如何在JavaScript中计算日期格式化字符串,但我知道我们可以在PHP中计算日期格式化字符串。所以,如果你想使用jQuery,你也应该使用ajax。 (我不使用日期选择器,人工手动插入日期) 这是PHP:

<?php 
$datefr = strtotime($_REQUEST['datefr']); 
$dateto = strtotime($_REQUEST['dateto']); 

$result = ($dateto-$datefr)/(3600*24); //convert 'secon' to 'day' 

echo $result; 
?> 

这是HTML:

<script type="text/javascript" src="jquery-1.9.1.js"></script> 
<script> 
function calculate(){ 
var datefr = $("#datefr").val(); 
var dateto = $("#dateto").val(); 

$.ajax({ 
url : "caculate.php", 
type: "POST", 
data : "datefr="+datefr+"&dateto="+dateto, 
success : 
function (data){ 
$("#result").val(data); 
} 
}); 

} 
</script> 
<input type="text" id="datefr"><input type="text" id="dateto"> 
<input type="button" onclick="calculate()" value="Calculate"> 
<br> 
<input type="text" readonly id="result">day(s) 

试试这个,你会看到的结果!
(将插入的日期必须为'yyyy-mm-dd'或'dd-mm-yyyy'格式)

+0

似乎有点exaive使用PHP和ajax的。 –

+0

这只是一个参考。 :d –

1

首先,您需要计算出“天数差异”的含义。

2013-10-11T00:00:01 - 2013-10-10T23:59:59 => 1 day or 2 seconds? 

使用UTC值,如果你可以忽略时间部分天的差别是相当简单:如果你有两个字符串日期

// Expects ISO8601 format yyyy-mm-dd 
function toUTCDate(s) { 
    s = s.split(/\D/g); 
    // Re-order arguments for other formats 
    return new Date(Date.UTC(s[0], --s[1], s[2])); 
} 

function daysDiff(dateString) { 
    var msInDay = 8.64e7 
    var now = new Date(); 
    var nowUTC = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()); 
    return (nowUTC - toUTCDate(dateString))/msInDay; 
} 

console.log(daysDiff('2013-09-30')); // 8 for 8 October 2013 

,该daysDiff功能可以简单:

function daysDiff(d0, d1) { 
    return (toDate(d1) - toDate(d0))/8.64e7; 
} 
0

如果您使用日期选择器,是的。你需要,不需要。使用Google Chrome和您提供的HTML(input type='date'),您可以免费获得一个。您提供的注释代码非常接近您所需要的。我不会给你答案,但给你指针,看到这是作业和所有。

$(':button').click(function(){ 
var start = $('#dateOfLastAccident').val(); 
var end = $('#today'); //Perhaps use what you used to popluate #today,this code won't get text or value, just an object 

var startDate = new Date(start); 
var endDate = new Date(end); 

var diff = endDate - StartDate; //javasctipt is case sensative 

var numDays = Math.floor(diff/1000 /60 /60 /24); 
$('#daysSinceLastAccident'+ numDays)(); //not how jQuery sets text: http://api.jquery.com/text/ 
//dont forget to show what is hidden: http://api.jquery.com/show/ 

这是裸露的骨头,但应该让你到你需要去的地方。

也学习javascript调试,使用警报进行调试,或者更好地记录到控制台进行调试,其中javascript控制台是(在铬f12提示是你的朋友)。