[PHP/MySQL] Opgeslagen date verhogen/lagen met X bij echo!?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een scriptje, ik ga nou uit vanuit het volgende systeem:

Bij posten van iets tijden worden opgeslagen in GMT tijden(via putenv @ amsterdam), deze tijden worden dan in de database gezet.
Een user kan zijn profile zo instellen welk land ze zich bevinden(mbv select), via javascript krijg ik dan een andere select waardat de tijdzones in staan voor het betreffende land(mits meer dan 1, anders gewoon die ene pakken).
Nou moet ik via die instelling de tijd kunnen verhogen/lagen zodra ik het UIT de database haal.

User X heeft in zijn profile staan dat zijn tijd is +4 vanuit GMT, dan moet je de tijden uit de db halen die GMT zijn en +4 uur berekenen.

PHP:
1
2
3
4
5
$time = "12:13:30";
$timearray = explode(":",$time);
$timearray[0] = $timearray[0] + 4;
$time = implode(":",$timearray);
echo $time;

Dit levert het op:
http://zooi.kingofdos.com/got/got-test-time.php

Hoe kan ik er nou voor zorgen dat de DATUM + TIJD goed gezet worden? Dit gezien dat het ook wel zo zou kunnen zijn dat als ik het post op 23:50:00 GMT en je dan +4 hebt dat je datum niet omhoog berekend wordt.

Mijn MySQL database ziet er ongeveer zo uit:
code:
1
2
3
4
table blaat
id    bigint 11    autoincreement
time    time
date    date

Ik kan NIET de time en date bij elkaar voegen wegens bepaalde SELECT redenen.

Acties:
  • 0 Henk 'm!

Verwijderd

Welke speciale redenen zijn dat dan?

Ik kan me niet echt een situatie voorstellen waarin het niet zou kunnen op een time/date in één veld op te slaan.

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Je kan in php een unix timestamp maken door de datum en tijd samen te voegen, hier kun je de tijdzone-correctie op loslaten en dan alleen de tijd weergeven.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bigtree schreef op 03 May 2003 @ 14:29:
Je kan in php een unix timestamp maken door de datum en tijd samen te voegen, hier kun je de tijdzone-correctie op loslaten en dan alleen de tijd weergeven.
Datum is heel belangrijk in een community systeem denk je niet?
Verwijderd schreef op 03 May 2003 @ 14:23:
Welke speciale redenen zijn dat dan?

Ik kan me niet echt een situatie voorstellen waarin het niet zou kunnen op een time/date in één veld op te slaan.
Het kan wel, moet ik wel een groot script veranderen, en ik ben nogal lui :+

Maar even uitgaand dat het niet gaat zoals ik wil, hoe kan ik het dan oplossen door het op 1 veld te zetten?

[ Voor 27% gewijzigd door Verwijderd op 03-05-2003 15:59 ]


Acties:
  • 0 Henk 'm!

  • 3o3
  • Registratie: Oktober 2001
  • Laatst online: 30-07-2006

3o3

kan je niet gewoon de tijd al ophogen in je mysql query?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
3o3 schreef op 03 May 2003 @ 17:09:
kan je niet gewoon de tijd al ophogen in je mysql query?
Dat zou ik niet weten, dat is dus mijn vraag aan jullie hoe dat jullie dat zouden oplossen :>

Acties:
  • 0 Henk 'm!

  • Cipri
  • Registratie: Januari 2001
  • Laatst online: 29-07-2024

Cipri

Of niet natuurlijk...

code:
1
SELECT id, time, SEC_TO_TIME(MOD(TIME_TO_SEC(time)+4*3600, 24*3600)) as localtime, date FROM test

code:
1
2
3
id  time        localtime   date
1   12:13:30    16:13:30    2003-05-04
2   23:30:30    03:30:30    2003-05-04


Beetje rare query misschien:
converteer het time veld naar een aantal seconden, tel daar 4 * een uur bij op, trek vervolgens de mod van 24 uur(Zodat 27:30 vertaald word naar 03:30), en converteer het daarna terug naar het time formaat
*D

-=[ Murlocs Ate My Boots]=- Sylvanas Alliance - EU - Orosei lvl 100 Paladin


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Verwijderd schreef op 03 May 2003 @ 15:58:
[...]
Datum is heel belangrijk in een community systeem denk je niet?
Uiteraard wil je ook de datum weergeven, maar je mist mijn punt geloof ik. Wat ik wilde zeggen is dat als je bij een unix timestamp een x aantal uren optelt ($timestamp += $uren * 60), en je print op basis van die timestamp de datum + tijd met een date, dan klopt je datum ook meteen. Het voorbeeld dat Cipri geeft is niet bruikbaar, want dan klopt je datum niet bij tijden na acht uur 's avonds.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
ik zou in de database oipslaan als gmt (http://www.php.net/manual/en/function.gmdate.php) en dan aan de hand van de settings en mktime (http://www.php.net/manual/en/function.mktime.php) de tijden berekenen
bv date ("y/m/d h:i:s" mktime (date("h")+$verschil, date ("i"), date("s"), date("m"), date("d"), date"Y"));
verschil indien negatief zal die het denk ik wel goed doen (+- = -) maar dat heb ik niet gecheckt

[ Voor 11% gewijzigd door cybermans op 04-05-2003 13:56 ]

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
cybermans schreef op 04 May 2003 @ 13:56:
ik zou in de database oipslaan als gmt (http://www.php.net/manual/en/function.gmdate.php) en dan aan de hand van de settings en mktime (http://www.php.net/manual/en/function.mktime.php) de tijden berekenen
bv date ("y/m/d h:i:s" mktime (date("h")+$verschil, date ("i"), date("s"), date("m"), date("d"), date"Y"));
verschil indien negatief zal die het denk ik wel goed doen (+- = -) maar dat heb ik niet gecheckt
Bedankt :)

Ik heb het nou zo opgelost:
PHP:
1
2
3
4
5
6
putenv("TZ=Europe/Amsterdam");
if ($_GET['do']=="+") {
    echo date ("H:i:s @ d-m-Y", mktime (date("H")+$a,date("i"),date("s"),date("m"),date("d"),date("Y")));
} else {
    echo date ("H:i:s @ d-m-Y", mktime (date("H")+$_GET['hours'],date("i"),date("s"),date("m"),date("d"),date("Y")));
}

Dan file.php?do=+&hours=4, krijgt hij de goeie tijd.

Nog even een vraagje, wat is de timezone van GMT? Of kan je gewoon uitgaan met deze tijdzone en dan even doorrekenen?
Pagina: 1