Uyarı: gregoriantojd () parametre 1 uzun olmasını beklediğini, dize hat 19 üzerinde verilen [yinelenen]

4 Cevap

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

i deneyin ve tbl_accident satır caseOpen bir tarih çekin her zaman ben şu hata ile karşılaşacaksınız ...

Warning: gregoriantojd() expects parameter 1 to be long, string given in on line 19

sorun ne olabilir?

caseOpen de tarih formatı gg / aa / YYYY var

<div style="paddingz: 5px;">
<table width="100%" height="100%" border="0" cellpadding="5" cellspacing="0" class="cp">
<?php
// Make a MySQL Connection
mysql_select_db("speedycms") or die(mysql_error());

// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM tbl_accident ORDER BY id ASC") 
or die(mysql_error());  

// Define $color=1 
$color="1";

// date difference
function dateDiff($dformat, $endDate, $beginDate)
{
    $date_parts1=explode($dformat, $beginDate);
    $date_parts2=explode($dformat, $endDate);
    $start_date=gregoriantojd($date_parts1[0], $date_parts1[1], $date_parts1[2]);
    $end_date=gregoriantojd($date_parts2[0], $date_parts2[1], $date_parts2[2]);
    return $end_date - $start_date;
}

$date1 = $row['caseOpen'];
$date2 = date('d/m/Y');

echo '
<tr bgcolor="#cccccc"> 
<td width="45px">Case ID</td> 
<td>Client Name/Address</td> 
<td>Accident Date</td> 
<td>Case Opened</td> 
<td>Days Running</td></tr>';
while($rows=mysql_fetch_array($result)){


// If $color==1 table row color = #FFC600
if($color==1){
echo "<tr bgcolor='#f2f2f2' valign='top'>
<td>".$rows['id']."</td>
<td>".$rows['clientName']." <BR> ".$rows['address']."</td>
<td>".$rows['doaDay']."/".$rows['doaMonth']."/".$rows['doaYear']."</td>
<td>".$rows['caseOpen']."</td>
<td>". dateDiff("/", $date2, $date1) ."</td>
</tr>";
// Set $color==2, for switching to other color 
$color="2";
}

// When $color not equal 1, use this table row color 
else {
echo "<tr bgcolor='#ffffff' valign='top'>
<td>".$rows['id']."</td>
<td>".$rows['clientName']." <BR> ".$rows['address']."</td>
<td>".$rows['doaDay']."/".$rows['doaMonth']."/".$rows['doaYear']."</td>
<td>".$rows['caseOpen']."</td>
</tr>";
// Set $color back to 1 
$color="1";
}

}
echo '';
?>      
</table>      
</div>

i herhangi bir yardım seviniriz. şimdiden teşekkürler!

4 Cevap

Yerine

$date_parts1=explode($dformat, $beginDate);
$date_parts2=explode($dformat, $endDate);
$start_date=gregoriantojd($date_parts1[0], $date_parts1[1], $date_parts1[2]);
$end_date=gregoriantojd($date_parts2[0], $date_parts2[1], $date_parts2[2]);

Bu deneyin

$date_parts1=strptime($beginDate, 'dd/mm/YYYY');
$date_parts2=strptime($endDate, 'dd/mm/YYYY');
$start_date=gregoriantojd($date_parts1['tm_mday'], $date_parts1['tm_mon'], $date_parts1['tm_year']);
$end_date=gregoriantojd($date_parts2['tm_mday'], $date_parts2['tm_mon'], $date_parts2['tm_year']);

Biraz uzun, ama strptime adlı parçaları bir diziye formatlanmış tarih dizeleri dönüm için özel olduğunu.

explode() bir dize alır ve bir dize dizisi döndürür. intval() uzun gregoriantojd() argüman (lar) dönüştürmek için kullanabilirsiniz.

edit

manuel:

int gregoriantojd  ( int $month  , int $day  , int $year  )

kod:

explode('d/m/y', ...)

Bu Alix Axel'de silinen cevap kısmına biraz benzer:

function dateDiff($endDate, $beginDate)
{
    $endTimestamp = strtotime($endDate);
    $beginTimestamp = strtotime($beginDate);

    // There are 86400 seconds in a day
    return ($endTimestamp - $beginTimestamp) / 86400;
}

Argümanların sayısı 3-2 değiştiğini unutmayın.

Ayrıca strtotime 12/11/2009 sizin yerel göre 11 Aralık 2009 veya 12 Kasım 2009 olacağını varsayımlar yapar unutmayın.

Bu ne i R. Bemrose yapıyor sona erdi ... u ne düşünüyorsunuz ... tamamen tüm işlevini şeyi atlamak istedi olduğunu?

$caseOpen = date('d/m/Y', strtotime($rows['caseOpen']));
$caseOpen2 = date('Y-m-d', strtotime($rows['caseOpen']));
$days = (strtotime(date("Y-m-d")) - strtotime("$caseOpen2")) / (60 * 60 * 24);
$days2 = round($days);

mükemmel çalışıyor!