[PHP/MySQL] van "()date" naar datum

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hey,

Met het volgende scriptje wil ik een datum die met de functie "()date" opgeslagen is in een mysql database, omzetten naar een gewone datum die ik dus versta.

code:
1
2
3
4
5
6
<?php
$daarjuist = 1126351137; // datum in mysql

$target_date = date('Y-m-d' . $daarjuist);
echo $target_date;
?>


Nu geeft het script dit als uitput:
2005-09-101126351137

Het 3de deel is dus niet juist. Wat doe ik fout?

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Even in de manual kijken. ;)
Niet concatenaten in een functie, maar gewoon een komma tussen de argumenten plaatsen:
PHP:
1
2
3
4
5
6
<?php
$daarjuist = 1126351137; // datum in mysql

$target_date = date('Y-m-d', $daarjuist);
echo $target_date;
?>

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


  • Icey
  • Registratie: November 2001
  • Laatst online: 17-09 16:46
Je zou zoiets kunnen maken om in ieder geval een mysql datum om te zetten naar 'iets leesbaars'.

PHP:
1
2
3
4
5
6
7
    $jaar = substr($datum,0,4);
    $maand = substr($datum,5,2);
    $dag = substr($datum,8,2);
    $maand_array = array("januari", "februari", "maart", "april","mei", "juni", "juli", "augustus", "september","oktober", "november", "december");
    $maand = $maand_array[$maand - 1];
    $datum = "$dag $maand $jaar";
    echo $datum;


edit: ik zie alleen dat jij een andere mysql datum heb dan mij, ik gebruik een yyyy-mm-dd, jij epoch waarschijnlijk :).

[ Voor 29% gewijzigd door Icey op 10-09-2005 13:43 ]


Verwijderd

Topicstarter
@Icey: Waar moet ik dan die "1126351137" ingeven?

Verwijderd

tja derde deel ziet er zo uit door de volgende regel :
$target_date = date('Y-m-d' . $daarjuist);
hierin plak je namelijk de variabele daarjuist achter het resultaat van de functie date().
volgens mij wat je echt wilt is gewoon het resultaat van de functie date() iun je database opslaan zodat wanneer je de gegeven uit je database haalt per direct de goeie vorm heeft (dus 2005-09-10).

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

@TS:
Om dat wat je nú probeerde goed te laten werken moet je gewoon kijken naar het verschil tussen jouw en mijn scriptje.
edit:
Dat had je trouwens ook zelf gewoon uit moeten kunnen vinden door je eigen code te debuggen. Weten dat je tussen twee argumenten van een functie geen punt maar een komma gebruikt, is de meest noodzakelijke basiskennis van PHP, zo gauw je iets verder komt dan het echoën van "hello world". Zelf even de manual bekijken had ook geen kwaad gekund; let daar de volgende keer een beetje op alsjeblieft: P&W is er om echte problemen neer te leggen, niet om je code door een ander te laten debuggen.


Het voorstel van Icey zou ik dan niet via die manier doen, maar liever zorgen dat mijn locales goed geïnstalleerd waren op de server en dan werken met strftime() om direct een mooi format uit een unix-timestamp te trekken:

PHP:
1
2
3
4
5
6
7
8
9
<?php
/* Set locale to Dutch */
setlocale(LC_ALL, 'nl_NL');

$timestamp = 126351700;

/* 126351700 will return "zaterdag 10 september 2005 13:28:20" from strftime() */
echo strftime ("%A %e %B %Y %H:%M:%S", $timestamp);
?>


@TIGER79:
Tijd meteen geformatteerd in de database opslaan is eigenlijk nooit een goede oplossing. Juist een unix-timestamp kun je met functies als strftime() eindeloos formatteren. Mocht je nu in een applicatie een korte notatie nodig hebben... dan kan dat. Mocht je over een jaar in een andere applicatie een lange notatie van gegevens uit dezelfde database nodig hebben... dan kan dat, simpelweg door wat andere parameters aan je formatfunctie mee te geven. Dat red je niet meer als je je bij het inserten in de database al vastlegt op een gekreupelde datumnotatie waarbij je gegevens als de tijd meteen al weggooit. ;)

[ Voor 18% gewijzigd door Superdeboer op 10-09-2005 17:47 ]

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

Superdeboer schreef op zaterdag 10 september 2005 @ 13:53:
[..]

@TIGER79:
Tijd meteen geformatteerd in de database opslaan is eigenlijk nooit een goede oplossing. Juist een unix-timestamp kun je met functies als strftime() eindeloos formatteren. Mocht je nu in een applicatie een korte notatie nodig hebben... dan kan dat. Mocht je over een jaar in een andere applicatie een lange notatie van gegevens uit dezelfde database nodig hebben... dan kan dat, simpelweg door wat andere parameters aan je formatfunctie mee te geven. Dat red je niet meer als je je bij het inserten in de database al vastlegt op een gekreupelde datumnotatie waarbij je gegevens als de tijd meteen al weggooit. ;)
Eigenlijk zou je gewoon een date time veld moeten gebruiken omdat je bij een timestamp geen datums voor 1970 kan verwerken. Veelal is dat niet zo'n probleem maar wel iets om in je ointwerp rekening mee te houden.

buit is binnen sukkel


  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Superdeboer schreef op zaterdag 10 september 2005 @ 13:53:
Het voorstel van Icey zou ik dan niet via die manier doen, maar liever zorgen dat mijn locales goed geïnstalleerd waren op de server en dan werken met strftime() om direct een mooi format uit een unix-timestamp te trekken:
Verder kan je een unix timestamp krijgen met een functie genaamd strtotime waardoor je absoluut niet moeilijk hoeft te doen met substr`s enzoverder.

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Sorry jongens, heb niet enorm veel ervaring met php (heb een photo-site en een webwinkel gemaakt). Ik ging ervanuit dat het een niet al te gecompliceerde website zou zijn en dus ook niet dat de database met andere software zou worden gedeeld (en dus dat beide programma's (of sites) dus compatibele format moeten hebben)...

Verwijderd

Topicstarter
Bedankt allemaal! Het lukt nu perfect! ;)

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

ripexx schreef op zaterdag 10 september 2005 @ 14:23:
[...]

Eigenlijk zou je gewoon een date time veld moeten gebruiken omdat je bij een timestamp geen datums voor 1970 kan verwerken. Veelal is dat niet zo'n probleem maar wel iets om in je ointwerp rekening mee te houden.
met een SIGNED (BIG)INT kan je gewoon negatieve getallen maken en dus gewoon ook datums voor 1970 gebruiken.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

Johnny schreef op zaterdag 10 september 2005 @ 15:17:
[...]


met een SIGNED (BIG)INT kan je gewoon negatieve getallen maken en dus gewoon ook datums voor 1970 gebruiken.
Alles kan, maar waarom een timestamp gebruiken als je datetime veld hebt. En mysql beschikt over genoeg datum functie om daar mee te rekenen of converteren.

buit is binnen sukkel

Pagina: 1