Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]odejmowanie godzin
peklo
post
Post #1





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


witam
Mam oto taki kod który dodaje mi w pętli godziny do tabeli czas

  1. foreach((array)$_POST['us'] as $key=>$us) {
  2. $data_wyk = (array)$_POST['data_wyk'][$key];
  3. $godz_powr = (array)$_POST['godz_powr'][$key];
  4. $rozp_pracy = (array)$_POST['rozp_pracy'][$key];
  5.  
  6. $sql ='INSERT INTO czas(rozp_pracy,godz_powr,us) VALUES (:rozp_pracy,godz_powr,us)';
  7. $stmt = $pdo->prepare( $sql );
  8. $stmt->bindValue(':rozp_pracy',$_POST['rozp_pracy'][$key], PDO::PARAM_STR);
  9. $stmt->bindValue(':godz_powr',$_POST['godz_powr'][$key], PDO::PARAM_STR);
  10. $stmt->bindValue(':us', $us, PDO::PARAM_STR);
  11. $stmt->execute();
  12. }

Typ danych w tabeli czas to TIME i jeśli w formularzu mam np godz. 10.00 to do tabeli dodaje mi jako 10:00:00.
Chciałbym teraz dodać jeszcze jedną zmienną np nadgodziny, która odejmie mi dwie zmienne
$nadgodziny=$godz_powr-$rozp_pracy;
  1. [/php]
  2. Próbuje tak
  3. [php]$stmt->bindValue(':nadgodziny',strtotime(($_POST['godz_powr'][$key])) - strtotime(($_POST['rozp_pracy'][$key])), PDO::PARAM_STR);

ale cos mi nie wychodzi. Poza tym chciałbym aby wpis to zmiennej nadgodziny był w takiej postaci 4:00:00 (jeśli np będzie takia różnica 20:00-16:00)
Jak mam to zrobić? Ktoś coś pomoże?

Albo inaczej. Czy da się odjąć te dwie godziny podczas wypełniania formularzza i wrzucenie róznicy do ukrytego inputa?

Ten post edytował peklo 27.08.2015, 19:26:41
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 36)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




strtotime - strtotime da ci liczbe sekund czyli 14400 a nie 04:00 ...
Go to the top of the page
+Quote Post
peklo
post
Post #3





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


no bo tak mi daje i dzieliłem to przez 3600 itd itp ale czy ide w dobrum kierunku. Czy tą operacje daje w $stmt->bindValue czy może przed bindowaniem?

Ten post edytował peklo 27.08.2015, 19:33:16
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No wartosc ktorą bindujesz ma juz byc prawidlowa... no to chyba logiczne?

A poza tym czemy tych godzin nie trzymasz poprostu w bazie jako sekundy? Byloby o wiele latwiej cokolwiek potem z tym robic.
Go to the top of the page
+Quote Post
bobek358
post
Post #5





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

Ostrzeżenie: (0%)
-----


A kolumny jaki mają typ w bazie danych?
Go to the top of the page
+Quote Post
peklo
post
Post #6





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


w kolumnach mam TIME. Ok to jak dodam je jako sekundy to jaki najlepiej typ danych zastosować?
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




smallint ?
Go to the top of the page
+Quote Post
peklo
post
Post #8





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


chyba zza mały zakres bo może byc 24h czyli 86400. MEDIUMINT(5) ?

Ten post edytował peklo 27.08.2015, 19:46:59
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No to dostosuj ten INT do max jaki mozesz miec. Zobacz w manualu jaki rozmiar jaki trzyma max i bedziesz wiedzial jaki dobrac.
Go to the top of the page
+Quote Post
peklo
post
Post #10





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


nie to sobie dobiore. generalnie chodziło mi o to jaki typ danych dobrać. Czy time czy może jakiś int. I druga sprawa. Jak w formularzu mam np. 16:00 to teraz tą wartość przy dodawaniu do tabeli, mam jak rozumiem pomnożyć X 3600 tak?
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Czy time czy może jakiś int.
Jaki typ to przeciez ci podalem wczesniej piszac smallint wiec logiczne ze nie time.

Cytat
Jak w formularzu mam np. 16:00 to teraz tą wartość przy dodawaniu do tabeli, mam jak rozumiem pomnożyć X 3600 tak?
No jesli w formularz nadal wspiujesz 16:00 to tak, przy zalozeniu ze nie bedzie minut (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
peklo
post
Post #12





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


no właśnie ,a jak będzie 16:47 ? (IMG:style_emoticons/default/smile.gif) Co wtedy
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




To wtedy 16*3600+47*60.. no wiesz, podstawy matematyki... (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
peklo
post
Post #14





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


nie no z tym 60 to juz wpadłeem wcześniej. Tylko teraz zastanawiiam się jak to zapisać. Trzeba to jakoś rozbić implode?
gerneralnie wszystkie zmienne mogą byc jako TIME tylko te nadgodziny jako mediumint

Ten post edytował peklo 27.08.2015, 20:04:31
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




explode a nie implode
Go to the top of the page
+Quote Post
peklo
post
Post #16





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


oj jasne że explode (IMG:style_emoticons/default/smile.gif) A jak to rozbić?
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




kurcze.... zajrzyj do manuala... tam masz napisane jak uzywac explode....
Go to the top of the page
+Quote Post
peklo
post
Post #18





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


explode to jaa już uzywałem ale nie wiem czy poradze sobie w tej petli z tym
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




A co za roznica czy w petli czy nie?? Dla explode to bez roznicy gdzie go uzywasz. Jak masz ochote to mozesz nawet go na Marsie uzywac
Go to the top of the page
+Quote Post
peklo
post
Post #20





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


e no wole w domu. Cus takiego $nadgodziny=explode(':',$nadgodziny); ?
Go to the top of the page
+Quote Post
nospor
post
Post #21





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




A masz zmienna $nadgodziny ktora jest w formacie GG:mm (IMG:style_emoticons/default/questionmark.gif) Jak ta, to tak, Jak nie, to nie....
Go to the top of the page
+Quote Post
trueblue
post
Post #22





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


peklo, czemu tą wartość wstawiasz do bazy? Możesz przecież nadgodziny liczyć na bieżąco podczas zapytania.
Go to the top of the page
+Quote Post
peklo
post
Post #23





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


trueblue jak mam podgląd dodanego formularza to mi zlicza na bierząco. Czyli odejmuje jedno od drugiego. Ale ja potrzebuje jeszcze dodatkowo wrzucic to oddzielnie jako inna zmienna do tabeli podczas dodawania formularza

Ten post edytował peklo 27.08.2015, 20:42:36
Go to the top of the page
+Quote Post
trueblue
post
Post #24





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


peklo,
może to Ci coś podpowie:
http://www.w3resource.com/mysql/date-and-t...ff-function.php
+
ew. http://www.w3schools.com/sql/func_date_format.asp
Go to the top of the page
+Quote Post
peklo
post
Post #25





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


żle napisałem trueblue w poprzednim poście ale już poprawiłem post23. Musze zrobić tak jak pisze nospor czyli rozbić to na sekundy i dodać do tabeli jako nowa zmienna nadgodziny.
Wolałbym dodać to jako całe godziny ale chyba to nie wyjdzie. Ale mam jakąś ciemnośc i nie kumam jak mam rozbić te dwie zmienne , odjąc jedna od drugiej i pożniej to dodać

Ten post edytował peklo 27.08.2015, 20:47:08
Go to the top of the page
+Quote Post
trueblue
post
Post #26





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Rozumiem Cię doskonale, ale może jeszcze spróbuję Cię naprowadzić:
  1. SELECT rozp_pracy,godz_powr,DATE_FORMAT(TIMEDIFF(godz_powr,rozp_pracy),'H%:%i') AS nadgodziny FROM czas

Sprawdź wynik.
Go to the top of the page
+Quote Post
peklo
post
Post #27





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


próbowałem zapytaniem juz robic wcześniej podczas dodawania do bazy ale coś mi nie wychodziło:) Ale nie wiem czemu bo mam taki wynik H:00
czyli 09:00--8:00 powinno byc 1, a jest 0. Moze chodzi o strefe czasową?

Ten post edytował peklo 27.08.2015, 20:55:16
Go to the top of the page
+Quote Post
trueblue
post
Post #28





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. SELECT rozp_pracy,godz_powr,DATE_FORMAT(TIMEDIFF(godz_powr,rozp_pracy),'%H:%i') AS nadgodziny FROM czas

Był błąd.
Go to the top of the page
+Quote Post
peklo
post
Post #29





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


błędu w zapytaniu nie ma poprostu daje

rozp_pracy godz_powr nadgodziny
08:00:00 09:00:00 00:00

Może szczegół tkwi w tym że mam TIME a nie np TIMESTAMP

Ten post edytował peklo 27.08.2015, 21:06:02
Go to the top of the page
+Quote Post
trueblue
post
Post #30





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(peklo @ 27.08.2015, 22:04:31 ) *
błędu w zapytaniu nie ma

W moim.


Cytat(peklo @ 27.08.2015, 22:04:31 ) *
Może szczegół tkwi w tym że mam TIME a nie np TIMESTAMP

Bez problemu działa u mnie na typie TIME.
Go to the top of the page
+Quote Post
peklo
post
Post #31





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


hmm to ja nie wiem o co kaman. To zapytanie daje w konsoli SQL

Ten post edytował peklo 27.08.2015, 21:13:52
Go to the top of the page
+Quote Post
trueblue
post
Post #32





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Na pewno masz typy TIME?
Go to the top of the page
+Quote Post
peklo
post
Post #33





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


na 100%



zrobiłem tak

  1. SELECT TIMEDIFF( godz_powr, rozp_pracy ) AS nadgodziny FROM czas


i poszło
Jutro zobacze i pokombinuje jak dodać to do bazy

Ten post edytował peklo 27.08.2015, 21:24:52
Go to the top of the page
+Quote Post
trueblue
post
Post #34





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Chodzi o to abyś nie dodawał do bazy tylko z niej wyciągał w razie potrzeby.
Go to the top of the page
+Quote Post
peklo
post
Post #35





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


no nie za bardzo. Na jednej karcie na być godzina rozpoczecia pracy, godzina przyjazdu itd. Te godziny mają zostać na stałe dla potrzeb archiwizacji itd. Natomiast zmienna nadgodziny ma być odzielna zmienną, która będzie rozliczana i po rozliczeniu ustawiana na 0 h
Go to the top of the page
+Quote Post
trueblue
post
Post #36





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Utworzyłbym pole typu boolean, rozliczone 0/1.
Ale jak Ci wygodniej.
Go to the top of the page
+Quote Post
peklo
post
Post #37





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


chyba że dodam nową zmienna rozliczone i dam 0 lub 1.
o o tym samym napisaliśmy w tym samym czasie:) Dzieki za pomoc Trueblue ja juz ide spać. Dzieki

Ten post edytował peklo 27.08.2015, 22:02:00
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 12:34