2012-07-05 46 views
2

我在工作的深處已經被拋棄,我從小就知道純HTML(90年代中期),並且我被要求改變一個表格在PHP中工作,我可以修改其他人編寫的PHP代碼,但是我無法自己寫。我已經改變了這種形式,只是我想要如何,但有一點我想改變,如果任何人都可以幫助它,將不勝感激...PHP表單,檢查兩個日期不相距太遠

已在此2天搜索網絡和嘗試東西,我有以下

<p class="quest">Date from: <input type="text" name="acc2" class="tcal" value="" /> to: <input type="text" name="acc3" class="tcal" value="" /> 

它使用JavaScript來彈出一個日曆(TIGRA日曆),其然後返回2個日期(ACC2和ACC3),日期是在d/M/Y(DD/MM/YYYY)格式(在歐洲/澳大利亞/新西蘭標準)。 我想要做的是讓它來檢查差異是否大於42天(6周),如果它是我希望它顯示一些文本鏈接(42天或更少是好的)。 如果我把在頁面上作爲測試:

<?php echo($acc3); ?> 

然後顯示1341442800在頁面上(被選擇的日期之前),如果用戶選擇的日期,則上述號碼保持(非動態)

是我想要的可能嗎? 如果沒有,可以檢查提交併彈出警報(沒有鏈接)? 我目前使用JavaScript來檢查的形式,一個例子是:

<script language="javascript" type="text/Javascript"> 
    <!-- 
     function collect() { 
      if(document.all.ct.value == "TempAcc") 
      { 
       if(document.all.acc7.value.length <11) 
       { 
        alert("You need to fill in your contact number with your FULL number including STD code."); 
        return false; 
       } 
      } 
     }//end function collect 
    //--> 
    </script> 

任何這方面的幫助將是非常讚賞,請儘量具體任意代碼,我現在還是非常初學者。 在此先感謝。

+2

你想檢查使用PHP或JavaScript的日期差異? –

+0

這對我來說沒有什麼不同,頁面是兩個組合,因爲它是 – Maff

回答

1

這對我的作品:Live demo on fiddle.net

// parse dates from DD/MM/YYYY to YYYY/MM/DD 
var oldBegin = parseDate("03/06/2012"); 
var oldEnd = parseDate("07/06/2012"); 

// calculate difference and format to days 
var diff = Math.round((oldEnd - oldBegin)/1000/60/60/24); 
alert(diff); 


function parseDate(str) { 
    var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/); 
    return (m) ? new Date(m[3], m[2]-1, m[1]) : null; 
} 

編輯: Include jQuery到您的網頁。它會幫助你的JavaScript部分。 賦予這兩個您的輸入字段一個唯一的ID(如ID =「日期1」和id =「日期2」),然後可以在javascript

$('date1').val(); 
$('date2').val(); 

整個代碼看起來應該像這些值:

<script type="text/javascript"> 
//The code will trigger when the user leaves the second input field 
$("#date2").focusout(function() { 
    // parse dates from DD/MM/YYYY to YYYY/MM/DD 
    var date1 = parseDate($('date1').val()); 
    var date2 = parseDate($('date2').val()); 

    // calculate difference and format to days 
    var diff = Math.round((date2 - date1)/1000/60/60/24); 
    alert(diff); 


    function parseDate(str) { 
     var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/); 
     return (m) ? new Date(m[3], m[2]-1, m[1]) : null; 
    } 
}); 
</script> 

您現在可以添加一些if語句來檢查一個輸入是否爲空。

+0

嗨克里斯,我只是試過這一點,加載頁面帶來了以下錯誤解析錯誤:語法錯誤,意想不到的T_VAR在C:\ Program Files \ Hornbill \ Supportworks服務器\ html \ _selfservice \ selfservice \ tempacc.php在線35 這是我使用的代碼: <? var acc3 = parseDate(「03/06/2012」); var acc2 = parseDate(「07/06/2012」); //計算差異和格式爲天 var diff = Math.round((acc3 - acc2)/ 1000/60/60/24); alert(diff); function parseDate(str){0} {var} = str.match(/ ^(\ d {1,2})\ /(\ d {1,2})\ /(\ d {4})$/); return(m)? new Date(m [3],m [2] -1,m [1]):null; } ?> – Maff

+0

這是因爲您需要將代碼包裝在' – Chris

+0

Cheers chris,當彈出「4」頁面加載,任何想法如何,我可以比較一旦他們已經進入日期的形式,而不是你的例子中給出的日期? – Maff

0

這裏有兩個問題/答案寫在PHPJavascript

PHP

$date1 = "2007-03-24"; 
$date2 = "2009-06-26"; 

$diff = abs(strtotime($date2) - strtotime($date1)); 

$years = floor($diff/(365*60*60*24)); 
$months = floor(($diff - $years * 365*60*60*24)/(30*60*60*24)); 
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 

printf("%d years, %d months, %d days\n", $years, $months, $days); 

的Javascript

var oldBegin = ... 
var oldEnd = ... 
var newBegin = ... 

var newEnd = new Date(newBegin + oldEnd - oldBegin); 
+0

嗨Sandeep,我會在哪裏使用「acc2」和「acc3」?(在PHP中) – Maff

+0

'$ date1'和'$ date2',所以'$ date1 = $ _POST ['acc2'];' –

0

試試這個:

 
<script type="text/javascript"> 
function daysBetween() { 
    var one = new Date(2012, 0, 1); // YYYY - MM - DD 
    var two = new Date(2012, 5, 5); // YYYY - MM - DD 

    var one_day=1000*60*60*24 

    document.write(Math.ceil((two.getTime()-one.getTime())/(one_day))+" days") 
} 
</script> 
+0

乾杯ravinder,我已經添加到頁面(並試圖更改「一」到「acc2」和「two」到「acc3」但它什麼都不做 – Maff

+0

您能告訴我您的代碼嗎? –

+0

Maff