- Home
- Categorie
- Coding e Sistemistica
- PHP
- conteggio giorni per compleanno
-
conteggio giorni per compleanno
Salve,
ho questo codice per calcolare i giorni rimanenti per il compleanno, funziona benissimo, il problema e che se lascio vuoto il campo "birthday" mi genera un errore[PHP]
<?php
$birthday = $row['birthday'];// get date of birthday this calendar year // count day remaing for birthday
$parts = explode('-', $birthday, 2);
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
$today = new DateTime('midnight today');if ($birth_date < $today) {
// next birthday is in one year
$birth_date->modify("+1 Year");
}// get number of days days remaining
$diff = $birth_date->diff($today);if ($diff->days > 0) {
echo "There are " . $diff->days . " day remaining until your birthday.";
} else {
echo '<font color="blue">' . "Happy birthday!" . '</font>';
}?>
[/PHP]ecco il codice errore
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (2019- 00:00:00) at position 4 (-): Unexpected character' in .... on line 239
line 239
[PHP]
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
[/PHP]come fixare questo codice?:bho:
-
Ciao Alex,
devi fare due cose:
- Non dare per scontato che $row["birthday"] sia valorizzato
Cambia
$birthday = $row['birthday'];
con
$birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
(Se lo script gira su PHP 7+ puoi abbreviare con: )
$birthday = $row['birthday'] ?? NULL;
Questo ti permette di valorizzare la variabile con il suo valore se ne ha uno, altrimenti la setta a NULL.
- Devi eseguire tutto il codice solo se $birthday non è NULL, racchiudi tutto dentro un if, il codice finale sarà:
[PHP]<?php
$birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
if($birthday !== NULL){
$parts = explode('-', $birthday, 2);
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
$today = new DateTime('midnight today');
if ($birth_date < $today) {
$birth_date->modify("+1 Year");
}
$diff = $birth_date->diff($today);
if ($diff->days > 0) {
echo "There are " . $diff->days . " day remaining until your birthday.";
} else {
echo '<font color="blue">' . "Happy birthday!" . '</font>';
}
}
?> [/PHP]
-
Funziona perfettamente
avrei un'altra richiesta, vorrei visualizzare i compleanni della data corrente (se ci sono) o settimanale (se non presenti) degli attori nel mio database nella pagina iniziale, con queste specifiche:
visualizzare
nome
eta'
foto
link alla scheda (id)
questi i campi
nome varchar(45)
foto varchar(100)
birthday datecome devo strutturare il codice?, non so' da dove cominciare
per l'eta' ho questo code gia' postato in un altro thread
[PHP]
<?php // code calcolo eta' by altraSoluzione by Ultima from forum GT$datanascita = $row['birthday'];
$dateOfBirth = $datanascita;
$today = date("Y-m-d");
$diff = date_diff(date_create($dateOfBirth), date_create($today));?>[/PHP]
Grazie Marco
-
con questo riesco ad estrarre i nomi
[PHP]
<?phprequire_once("connetti.php");
// just returns the actor having a birthday
function birthday_today() {
$result = mysql_query("SELECTnome
FROMactor
WHERE MONTH(birthday) = MONTH(NOW()) AND DAY(birthday) = DAY(NOW())");
$actor = array();
while ($row = mysql_fetch_assoc($result))
$actor[] = $row['nome'];
return $actor;
}// make a unordered-list out of the actor having birthday
$ul = "<ul>";
foreach(birthday_today() as $nome)
$ul .= "<li>$nome</li>";
$ul .= "</ul>";echo $ul;
?>[/PHP]
dovrei integrare adesso questo + l'eta'
[PHP]
<td class="text-center"><?php if($row['foto'] != ""): ?>
<img src="image_upload/actor/uploads/<?php echo $row['foto']; ?>" width="110px" height="130px" style="border:1px solid #333333;">
<?php else: ?>
<img src="image_upload/actor/images/nophoto170.png" width="100px" height="130px" style="border:1px solid;">
<?php endif; ?></td><td class="text-left"><?php echo "<a href="cinema.php?id=" . $row['actor_id'] . "">" . $row['nome'] . "</a>";?></td>
[/PHP]
qualcuno mi aiuta?:?:bho:
-
risolto
-
risolto mah...vorrei visualizzare i risultati in ordine orizzontale, come fare?
codice parziale
[PHP]
<div class="col-xs-12 col-sm-9">
<div class="panel panel-default">
<div class="panel panel-heading"><h3>Birthday from Today or 1 Week</h3></div><div class="padded-panel"><div class="row"><div class="col-sm-12">
<?php
require_once("connetti.php");
// just returns the actor having a birthday
$query = mysql_query("SELECT * FROM actor WHERE
(CASE
WHEN DATE_FORMAT(birthday, '%m-%d') < DATE_FORMAT(NOW(), '%m-%d')
THEN CONCAT(DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 YEAR), '%Y-'), DATE_FORMAT(birthday, '%m-%d'))
ELSE CONCAT(DATE_FORMAT(NOW(), '%Y-'), DATE_FORMAT(birthday, '%m-%d'))
END)
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 WEEK) ORDER BY birthday asc ");
while($row=mysql_fetch_array($query)){
?><div class="castbox"><p><?php echo '<img src="image_upload/actor/uploads/' . $row['foto'] . '" alt="" height="180" width="150"'?>
<?php echo $row ['nome'] ?><br><?php echo "<a href="cinema.php?id=" . $row['actor_id'] . "">" ."<br>". $row['nome'] ."<br>". $row ['birthday'] . "</a>";?></a><br><i>
[/PHP]
adesso visualizzo cosi