2013-10-08 41 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提示是你的朋友)。