[PHP] Ricavare giorno della settimana da un campo data

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Un saluto a tutti,
avrei la necessità di estrarre da una tabella il campo data scritto nel formato yyyy-mm-gg e convertire tale campo nel suo corrispondente giorno della settimana (Lun - Mar - Mer - ecc) per poi memorizzare il valore estratto in una variabile.

In sostanza ho una tabella con circa 1000 record, ho creato un form con 6 righe :
Lunedi
Martedi
Mercoledi
Giovedi
Venerdi
Sabato

dovrei fare una cosa del genere:
Seleziona tutti i campi dalla tabella appuntamenti aggiungi accanto al campo data il relativo corrispondente giorno della settimana .

Mi dareste una mano a capire come strutturare la query

o_O
 
Ciao, la possibilità di crearti uno script che esegua quello che cerchi qui non è possibile, ovvero l'unica cosa, se vuoi e cercare nella sezione offerte di lavoro li trovi la soluzione a tutti i tuoi mali...:confused::confused::confused:

Se invece hai qualcosa di pronto, saremo qui a darti una mano..

A presto.
 
ciao
puoi fare una funzione del genere
PHP:
<?php
function giorno($d){
 
    //attento la data deve essere nel formato yyyy-mm-gg
    //anche come separatori (se altri separatori devi modificare)
    $d_ex=explode("-", $d);//attento al separatore
    $d_ts=mktime(0,0,0,$d_ex[1],$d_ex[2],$d_ex[0]);
    $num_gg=(int)date("N",$d_ts);//1 (for Monday) through 7 (for Sunday)
    //per nomi in italiano
    $giorno=array('','lunedì','martedì','mercoledì','giovedì','venerdì','sabato','domenica');//0 vuoto
    return $giorno[$num_gg];
}
//********
$data="2016-07-03";//domenica
echo giorno($data);//output domenica
?>
ho messo l'echo ma tu puo assegnare ad una variabile da usare dove vuoi
 
ciao
forse non ho capito bene la tua domanda, vorresti aggiungere un campo e aggiornare tutti i record aggiungendo il nome del giorno accanto al campo in cui hai la data?
è così?
 
ciao
forse non ho capito bene la tua domanda, vorresti aggiungere un campo e aggiornare tutti i record aggiungendo il nome del giorno accanto al campo in cui hai la data?
è così?


Ciao,
esatto, vorrei poter aggiungere un campo e updatare tutti i record, cosi facendo avrò nel db accanto alla data espressa nel formato yyyy-mm-gg anche il relativo giorno ...

Grazie mille per le dritte ;)
 
Ciao, la possibilità di crearti uno script che esegua quello che cerchi qui non è possibile, ovvero l'unica cosa, se vuoi e cercare nella sezione offerte di lavoro li trovi la soluzione a tutti i tuoi mali...:confused::confused::confused:

Se invece hai qualcosa di pronto, saremo qui a darti una mano..

A presto.

Ciao Cris8380,
tu non hai ragione ma di più, mi scuso per la forma e lo stile completamente fuori dai canoni mrwebmaster, la prossima volta cercherò di essere meno superficiale.

Sorry :)
 
Ciao Marino,
grazie per la risposta, ma la funzione DAYOFWEEK(date) recupera il numero di giorno della settimana esempio 1 - 2 - 3 - 4 - 5, a me servirebbe uno script php che effettui l'update di tutte le righe le db aggiungendo accanto all'attuale colonna data una colonna giorno .
 
ciao
puoi fare in diversi modi es se vuoi che nel campo sia scritto lunedì o martedì ...
metto i nomi dei campi e tabella a caso, poi devi adeguarli
PHP:
<?php
//campo con nome giorno letterale
function giorno($d){
    //la funzione che ti ho già postato
}
//dati di connessione
//p.s. usa mysqli, abbandona mysql
//chiamo il camppo giorno_settimana varchar(8)
$query=mysqli_query($conn,"SELECT * FROM tabella");
whyle($riga=mysqli_fetch_assoc($query)){
    $id=$riga['id_del_record'];
    $data=$riga['data'];//yyyy-mm-gg
    $gg_set=giorno($data);
    $q_upp=mysqli_query($conn,"UPDATE tabella SET giorno_settimana='$gg_set' WHERE id_record=$id");
}
?>
oppure come ha detto marino51 puoi usare la funzione DAYOFWEEK tenendo presente che tale funzione restituisce il numero del giorno della settimana e contando in modo diverso dall'attributo N di date()
1=> domenica .... 7=> sabato, quindi inserire nel campo che ho chiamato giorno_settimana il numero del giorno e poi visualizzare il letterale via php,
in tal caso il campo giorno_settimana deve essere settato a int(1)
forse, ma da provare e non sui dati originali, potrebbe funzionare questa query
PHP:
<?php
//dati di connessione
$query=mysqli_query($conn,"UPDATE tabella SET giorno_settimana=DAYOFWEEK(data)");
?>
poi quando li vai a leggere prima ti fai l'array con i giorni
PHP:
<?php
$gg_set=array('','domenica','lunedì','martedì','mercoledì','giovedì','venerdì','sabato');
$query=mysqli_query($conn,"SELECT * FROM tabella ORDER BY data");
whyle($riga=mysqli_fetch_assoc($query)){
    $data=$riga['data'];
    $n_gg=(int)$riga['giorno_settimana'];
    echo "$data ".$gg_set[$n_gg]."<br>";
}
?>
con il secondo metodo, con DAYOFWEEK, risparmi spazio e risorse del db
attento però: la query con DAYOFWEEK non l'ho provata e quindi potrebbe non funzionare o peggio rovinarti il db
 
premesso che il giorno della settimana, sia come numero che come nome, è già disponibile nel db perché intrinseco alla data, è decisamente inutile cercare di inserire una colonna specifica nel db, solo per la fatica necessaria,
un modo per ottenere il risultato da una semplice query è il seguente,
Codice:
SELECT
miadata,
CASE DAYNAME(miadata)
WHEN 'Monday'    THEN 'Lunedì'
WHEN 'Tuesday'   THEN 'Martedì'
WHEN 'Wednesday' THEN 'Mercoledì'
WHEN 'Thursday'  THEN 'Giovedì'
WHEN 'Friday'    THEN 'Venedì'
WHEN 'Saturday'  THEN 'Sabato'
WHEN 'Sunday'    THEN 'Domenica'
END
la query estrae data e nome del giorno, il manuale è riportato qui
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayname
 

Discussioni simili