PHP, huidige tijd in database zetten

Status
Niet open voor verdere reacties.

Gammort

Gebruiker
Lid geworden
12 dec 2006
Berichten
271
Hey Helpmij'ers,

Bij het maken van een veilingssite moet er bij het plaatsen van een object de huidige tijd en dag meegegeven worden en in de database worden geplaatst (looptijdbegindag en looptijdbegintijdstip). Vervolgens moet de de veiling dan 48 uur duren. Maar ik heb geen idee hoe ik dit precies aan moet pakken.

Misschien heeft iemand wat suggesties en/of kan je wat code laten zien hoe dat precies gaat.

Alvast bedankt,

Gammort
 
Je moet een datum in een database altijd opslaan als DATETIME. Vervolgens kun je met de DATE/TIME-functies allerlei berekeningen daarop loslaten.
 
Je moet een datum in een database altijd opslaan als DATETIME. Vervolgens kun je met de DATE/TIME-functies allerlei berekeningen daarop loslaten.

Maar hoe stop ik de tijd op het moment dat er op submit geklikt wordt, in de database?
 
INSERT INTO x (y) VALUES (NOW())
 
en als ik nou de dag en de tijd los wil invoeren (ja omslachtig maar het moet :/)

Code:
mssql_query("INSERT INTO looptijdbegintijdstip VALUES (NOW())") or die(mssql_error());
mssql_query("INSERT INTO looptijdbegindag VALUES (????????)") or die(mssql_error());

Of heb ik met NOW() meteen de dag en de tijd te pakken, want dat wil ik juist niet.

Verder wil ik nog afhankelijk van een keuze in een formulier, een aantal dagen bij de looptijdbegindag optellen. Dus bijvoorbeeld 7 dagen erbij. Ik heb nu iets wat waarschijnlijk niet goed is maar ik laat het toch even zien.

Code:
<select size="1" name="aantaldagen">*
  <option value="1">1 Dag</option>
  <option value="2">2 Dagen</option>
  <option value="3">3 Dagen</option>
  <option value="4">4 Dagen</option>
  <option value="5">5 Dagen</option>
  <option value="6">6 Dagen</option>
  <option value="7">7 Dagen</option>
	<option selected="7">7 dagen</option>
  </select>

Code:
$aantaldagen = $_POST['aantaldagen'];

Code:
$totaaldagen = (DATE() + $aantaldagen); //<-- dit is fout

mssql_query("INSERT INTO looptijdeindtijdstip VALUES (???????)") or die(mssql_error());
mssql_query("INSERT INTO looptijdeinddag VALUES ('$totaaldagen')") or die(mssql_error());
 
Je hebt 2 tabellen, één voor begintijd, één voor begindag?
 
Ja, helaas wel. Dat staat zo in de beschrijving.

(btw, het selecteren van de tabel is fout maar is inmiddels wel goed)
 
Dat is pertitent onjuist. Als het zo moet, moet je het gewoon weigeren op die manier uit te voeren. Eén ding is zeker: dit gaat _nooit_ lukken.
 
oké dan ga ik de fictieve opdrachtgever even mailen of het anders kan.

ik kom dan uit op dit:

PHP:
<?php
$aantaldagen = $_POST['aantaldagen'];

mssql_query("INSERT INTO Voorwerp(looptijdbegindatum) VALUES (NOW())") or die(mssql_error());

$totaaldagen = (NOW() + $aantaldagen);

mssql_query("INSERT INTO Voorwerp(looptijdeinddatum) VALUES ('$totaaldagen')") or die(mssql_error());

 }
?>

alleen dat stukje van $totaaldagen = (NOW() + $aantaldagen);
dat klopt dan niet, maar hoe tel in dan bijvoorbeeld 7 dagen bij de huidige tijd op?
 
Even zoeken op 'sql date functions', vind je er heel veel van. Wel zorgen dat het DATETIME of DATE-velden zijn.
 
Aangezien dat ik toch op vragen jacht ben doe ik deze er ook even bij.

Het beste wat je kan doen is een time stamp nemen.

Code:
$time = time();
// als je indagen wilt rekenen moet je dus 3600 (= 1 uur)*24= 86400 voor 1 dag //
// Je value's voor de dagen worden zo iets dan
// 1 dag = 86400
// 2 dagen = 172800
// en so on
// als je dan vervolgens het ophaalt (ik neem hier even looptijd)
$eindtijd = $looptijd + $time

Mocht je iets niet snappen, dan zie ik het hier wel :)
Voordeel van deze methode is dat het tot op de seconde nauwkeurig is.
 
En DATETIME niet? Alsjeblieft zeg, ga iemand niet aanraden in een database een timestamp te zetten...
 
Het is persoonlijk.
Net wat je makkelijk vind.
Aan de hand van een timestamp kan je alles berekenen.
En het is erg makkelijk werken.
 
Nee, het is geen persoonlijke voorkeur, het is slechter.

- Je bent altijd inconsistent, omdat je niet elke datum in een timestamp kan omsluiten.
- Je verliest ALLE ingebouwde SQL-functies die te maken hebben met datum/tijd.
- Je kunt een timestamp niet direct lezen, in de database, een normale datum wel.
- Het kost veel regels code extra om er een normale datum uit te halen, iets dat bij een DATE niet het geval is.
 
Ik gebruik GetDate(); want ik doe het met mssql.

Ik wil gewoon 10 dagen bij de huidige datum optellen, zo moeilijk kan dat niet zijn toch?
 
Laatst bewerkt:
Met MySQL:
PHP:
<?php
  $aantaldagen = $_POST['aantaldagen'];
  mssql_query("INSERT INTO Voorwerp (looptijdeinddatum) VALUES (DATE_ADD(DATE(NOW()), INTERVAL $aantaldagen DAY))");
?>

Met PHP:
PHP:
<?php
  $aantaldagen = $_POST['aantaldagen'];
  $datum=date("Y-m-d",time()+$aantaldagen*86400);
  mssql_query("INSERT INTO Voorwerp (looptijdeinddatum) VALUES ($datum)");
?>
 
Laatst bewerkt:
Met MySQL:
PHP:
  mssql_query("INSERT INTO Voorwerp (looptijdeinddatum) VALUES (DATE_ADD(DATE(NOW()), INTERVAL $aantaldagen DAY))");
MySQL? Vandaar dat je de functie mssql_query() gebruikt ;)

Daarnaast neem ik aan dat je duidelijk wilt maken dat de MySQL-variant beter is dan het met PHP te doen, klopt dat? Zo nee, dan vraag ik mij af wat het doel van je bericht is:(
 
:o Ik heb gewoon het regeltje uit zijn code gecopieerd en een beetje aangepast. Had niet eens gezien dat er mssql stond ipv mysql :o

Het doel van de 2 voorbeelden is eerder educatief... laten zien hoe het kan!
TS had in zijn code een mix van beide gebruikt,
PHP:
$totaaldagen = (NOW() + $aantaldagen);
en dat werkt uiteraard niet...


PS: ik vermoed dat de mysql-string ook werkt in mssql, of zou dat wel eens kunnen tegenvallen?
 
Met PHP:
PHP:
<?php
  $aantaldagen = $_POST['aantaldagen'];
  $datum=date("Y-m-d",time()+$aantaldagen*86400);
  mssql_query("INSERT INTO Voorwerp (looptijdeinddatum) VALUES ($datum)");
?>

Ik heb dit gebruikt, $aantaldagen zijn gewoon int waardes zoals 1, 2 enzo. Hij telt het inderdaad goed bij elkaar op maar hij doe geen uren secondes enzovoorts. Alleen maar de datum.

Dus huidige tijd is: 6-10-2008 14:26:03
Uitkomst: 11-10-2008 0:00:00

Maar het moet worden: 11-10-2008 14:26:03

Ik vermoed dat dit met Y-m-d te maken heeft, maar wat moet het dan worden?

Alvast bedankt,

Gammort

Edit: het is gelukt, bedankt voor jullie inzet allemaal!
 
Laatst bewerkt:
In MSSQL kun je GetDate() gebruiken voor de huidige tijd, dat hoef je niet met PHP te doen.


EDIT:
Sorry, zie dat het +10 dagen moet zijn, moment. Hm, kan + 10 dagen niet vinden voor MSSQL, maar moet wel bestaan. Misschien kun je zoeken op 'interval mssql'.

EDIT23221:

Volgens mij heb ik iets gevonden:
INSERT INTO x (a) VALUES (DATEADD(DAY,DATEDIFF(DAY,GetDate()), 10))

Misschien niet helemaal correct, maar in die richting moet je denken. Gewoon even mee spelen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan