Creare script per calcolo ore

  • Creatore Discussione Creatore Discussione data30
  • Data di inizio Data di inizio

data30

Nuovo Utente
8 Set 2015
7
0
0
Salve a tutti,
mi rivolgo in questo forum in quanto lo conosco già da un pò e mi ha risolto spesso dei problemi basilari di programmazione, aiutandomi spesso a capire le mie grossisime lacune, non sono certo un programmatore ma grazie questa community pian piano imparo qualcosa di nuovo.
Vi chiedo aiuto per risolvere uno script che vorrei realizzare con php e mysql.
Ho una tabella di nome orari e dei campi con nome inizio - fine - e durata.
Vorrei se sempre fattibile ottenere il tempo trascoroso in ore fra il timestamp campo inizio e il timestamp campo fine quindi salvare sul campo durata le ore trascorse fra campo inizio e fine. Ho letto in molte guide che si fa con timediff. Purtroppo non so bene come cominciare a generare il file php.
Se qualcuno di voi sa anche se minimo potrebbe farmi qualche esempio?
Vi ringrazio per l'attenzione.
 
Ciao :)
Se il formato è YYYY-MM-DD HH:II:SS potresti dare un'occhiata a questa soluzione, non utilizza molte funzioni e quindi è semplice da capire.
Qualche indicazione:
-abs() ottiene il valore assoluto del parametro dato;
-strtotime() formatta un'indicazione di data e ora trasformandola in un timestamp UNIX;
-floor() arrotonda per difetto il parametro dato.

Altrimenti, possiamo adattarla in base a che formato data/ora utilizzi tu :)
 
Gentile programmatore la ringrazio per la l'attenzione che mi ha rivolto.
In pratica io uso due timestamp esempio:
inizio: 2015-09-08 16:16:00
fine: 2015-09-08 18:16:00
il risultato dovrebbe restituire 02:00 ore e deve andare a popolare il campo durata appartenente alla stessa tabella.
Grazie tanto dell'indicazione nell'attesa di altre proposte approfondisco gli argomenti che mi ha gentilmente indicato.
 
Credo in parte di aver risolto, lanciando la seguente query:
SELECT user_id, inizio, fine,
TIMEDIFF( fine, inizio ) AS DiffDate
FROM orari
mi fa perfettamente il calcolo delle ore anche a cavallo della mezzanotte.
adesso questo risultato lo vorrei inserire sul campo durata di tipo TIME, come deve essere impostata la query secondo voi?
 
Ultima modifica:
Dopo aver notato che, salvando i risultati delle queries, si utilizzano meno risorse ma più spazio sul server, si potrebbe fare così:
Codice:
update orari set durata=
(SELECT user_id, inizio, fine, TIMEDIFF( fine, inizio ) AS DiffDate FROM orari)
Saluti :)
 
Dopo aver notato che, salvando i risultati delle queries, si utilizzano meno risorse ma più spazio sul server, si potrebbe fare così:
Codice:
update orari set durata=
(SELECT user_id, inizio, fine, TIMEDIFF( fine, inizio ) AS DiffDate FROM orari)
Saluti :)

io sono poco pratico ma se devo aggiornare un valore perché la select me ne ritorna 4 ?
quale userà la "update" per giustappunto aggiornare il valore ?
poi quella select quale record aggiornerà ?
may be ...
PHP:
update orari set durata=TIMEDIFF( fine, inizio )
non mettendo nessuna clausola where verrà aggiornata l'intera tabella
nel caso "durata" sia "null" si può aggiungere
PHP:
update orari set durata=TIMEDIFF( fine, inizio ) where durata is null
limitando l'aggiornamento ai soli record che lo richiedono
ciao
Marino
 
Ultima modifica:
Salve ho avuto modo di provare le vostre soluzioni quella funzionante è quella del Sig. Marino.
Le mie prove sono state fatte dal pannello sql eseguendo la query.
Il passaggio che mi manca è scrivere la query sul file php in modo da riempire i relativi campi.
Ricapitolando lo script deve:
selezionare il campo inizio (Time) se il campo inizio è pieno allora riempire il campo fine (anch'esso Time) e aggiornare (Update) il campo durata.
Il campo durata, ho testato che funziona eseguendo la query:
update orari set durata=TIMEDIFF( fine, inizio ).
Qualche suggerimento di sintassi per iniziare?
 
Ultima modifica:
Ricapitolando lo script deve:
spero di aver capito la necessità,
ma sono poco d'accordo nel creare un nuovo script per aggiornare il campo durata,
nel mio pensiero quel valore non può essere omesso al momento dell'inserimento iniziale del record,
perché nel data base l'informazione risulta inconsistente
e se dovesse essere utilizzata prima del suo aggiornamento potrebbe produrre risultati altrettanto inconsistenti
quindi suggerisco di completare con il calcolo lo script che inserisce i records nel db
saluti
Marino
 
Ho ripreso a lavorare al mio progetto dopo qualche giorno di impegni vari.
Grazie a Marino51, con la sua soluzione ho risolto. Avrei un'altra necessità adesso.
Su un altra tabella mi ritrovo un campo COSTO e un campo DURATA di tipo (TIME 00:00:00).
In pratica devo calcolare il costo per la durata, esempio:
COSTO= 1.75
DURATA= 01:30:00
Facendo la query con la moltiplicazione ovviamente non funziona.
Non riesco a capire se devo convertire TIME oppure non serve.
Ho veramente cercato ovunque ma senza nessun risultato.
 
se non hai ancora risolto, questo è il mio suggerimento,

supponendo che il costo sia per ora (costo orario),
la durata deve essere convertita in ore prima del calcolo,
il modo, per me migliore, è rappresentato nel codice sottostante
ciao
Marino

PHP:
<?php
$COSTO= 1.75;
$DURATA = '21:30:10';
$hour = strtotime("1970-01-01".$DURATA."UTC")/3600;
$valore = $COSTO * $hour;
$valore = round($valore, 2, PHP_ROUND_HALF_UP);
echo "costo = ".$COSTO." - durata = ".$DURATA." - ore = ".$hour." - valore = ".$valore;
?>
 
Salve,
dopo un periodo di intenso lavoro riprendo il mio progetto che a piccoli passi sto portando avanti grazie a tutti voi che avete risposto, soprattutto a marino51 che ha reso il mio modo di esprimermi in un linguaggio di programmazione :-)
Avrei necessità di un ulteriore consiglio.
In pratica devo fare una query che nella mia tabella inserisce su i campi A e B un TIMESTAMP.
Provo a spiegarmi meglio, quando premo un pulsante la query deve inserire sul campo A il TIMESTAMP, ma se lo trova già pieno deve inserirlo sul campo B.
Avreste qualche suggerimento? Devo lavorare forse con le strutture condizionali?
Grazie
 
Salve,
dopo un periodo di intenso lavoro riprendo il mio progetto che a piccoli passi sto portando avanti grazie a tutti voi che avete risposto, soprattutto a marino51 che ha reso il mio modo di esprimermi in un linguaggio di programmazione :-)
Avrei necessità di un ulteriore consiglio.
In pratica devo fare una query che nella mia tabella inserisce su i campi A e B un TIMESTAMP.
Provo a spiegarmi meglio, quando premo un pulsante la query deve inserire sul campo A il TIMESTAMP, ma se lo trova già pieno deve inserirlo sul campo B.
Avreste qualche suggerimento? Devo lavorare forse con le strutture condizionali?
Grazie
Ormai stremato sono arrivato alla conclusione di utilizzare per il campo A un insert e per il campo B un Update.
Naturalmente mi sarò spiegato male provo a riformulare il tutto.
In una tabella ho le seguenti colonne:
Id - chiave primaria
User - Nome utente
Start - CURRENT_TIMESTAMP
Fine - CURRENT_TIMESTAMP con l'attributo "on update CURRENT_TIMESTAMP"
Durata - NULL
La query che vorrei realizzare deve selezionare User se Durata è NULL e quindi fare Update su colonna Fine.
Ho provato con le strutture condizionali, anche con i trigger ma non ne vengo a capo nella costruzione della query.
Qualche suggerimento?
Grazie
 

Discussioni simili