Toon posts:

[PHP] Timestamp aanpassen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben weer ff aan t kloten met PHP voor een vriend van mij, maar ik loop tegen het volgende aan:

als iemand een bericht post, krijgt het een timestamp mee dmv date(YmdHis) (dus t wordt gewoon 20020221153236)... Maar de server waar dit script op draait, staat in de VS, waardoor die tijd niet klopt in vergelijking met die in NL...

Hoe zet ik dat recht?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

+uur*60 :?

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Hmm, daar dacht ik ook al aan, maar dan krijg je weer dit:

als je bv om 23 uur iets post (VS-tijd), dan telt ie er bv 7 uur bij op, en dan is ie 23+7 = 30 uur, en dat bestaat niet :P

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

tja if >23 then -24 :P

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Ja en dan weer bij de dag eentje optellen, en dan weer verder... :P

Is er niets simpelers ? (want je moet nu ook weer rekening gaan houden met de verschillende lengtes van de maanden)...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Als je gewoon een unix timestamp gebruikt, kun je gewoon het tijdsverschil in seconden er bij optellen/van aftrekken. Heb je geen probleem met dag, maand en jaar overgangen...

(unix timestamp is aantal seconden sinds 1-1-1970)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • itsme
  • Registratie: Februari 2000
  • Niet online
Dat moet lukken idd,

Ik heb echter een probleem met die timestamp, ik heb ook een yyyymmddhhmmss timestamp, maar hoe echo ik die nu als:

"gepost door $user op $dd $mm $yyyy om hh:mm uur"

Of nog liever:

"gepost door $user op $dayoftheweek $dd $month $yyyy om hh:mm uur"

Ik loop hier al lang mee te rommelen, maar lukken wil t niet echt.

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


Verwijderd

je kunt beter een unix timestamp gebruiken...
in php is dat met de functie time() en je kunt er een normale datum van maken met de functie date()

als het formaat hetzelfde is zou je met substr() kunnen werken...

  • itsme
  • Registratie: Februari 2000
  • Niet online
Maar met time() moet ik m handmatig invoegen (toch?) timestamp doet ie vanzelf. Daarnaast heb al een groot aantal post dat in de dbase zit, dan zou ik die allemaal moeten veranderen.

De bedoeling is dus echt met een yyyymmddhhmmss timestamp te werken, ik kom er alleen niet uit.

Hoe verdeel ik deze string nu in stukkies?

zo?
code:
1
$jaar = substr("$timestamp, 0, 4);

Ik neem aan van wel, dan zou ik er al voor t grootste deel uit zijn (zo moeilijk was dit niet), probleem is hoe ik er nu de naam van de maand van maak en de dag.

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Als je MySQL gebruikt, en je hebt die timestamps asl het type timestamp in de DB opgeslagen, kun je bij het uitlezen van de DB gewoon de mysql functie UNIX_TIMESTAMP() gebruiken. Met date kun je er vervolgens in php elk willekeurige notatie van maken die je maar wilt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Juist gewoon met de mysql functie unix_timestamp()

Je tabel in mysql voeg je een extra attribute toe, (column in phpmyadmin) deze vul je met een timestamp. (Als je geen phpmyadmin gebruikt is het wel heel eenvoudig te vinden in de mysql manual).

Bij elke nieuwe entry word er een timestamp in gepleurd door mysql.

Wat je nu nog moet doen is deze timestamp omzetten naar een voor ons af te lezen tijd, dit is heel eenvoudig in php.

eerst haal je de timestamp uit de tabel, stop je deze in een variabele. Als je een mysql_fetch_array gebruikt ziet het er zo uit:

$stamp = $row["je column naam"];

vervolgens tel je het aantal seconden op dat je de tijd vooruit wil zetten. (of eraf lijkt me duidelijk)

$localtime = $stamp + 4800;

daarna maak je er een voor mensen afleesbare datum van met "date()", kun je opzoeken op de php site.

$datum = date("D d M Y - H:i", "$localtime");

Deze zet de dag en maand in engelse text in $datum plaatsen, met de tijd erbij zoals je dat wou.

Nu is trouwens ook de weg vrij voor een stapje verder, het bijhouden van hoevaak de tablerow is ge-update en wanneer dit voor het laatst is geweest. (En uiteraard de datum van posten)

<edit>Tjonge wat een typo's, gaan de scriptmeesters eens een spellingscontrole implementeren?</edit>

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 08:34
Hallooo zeg, je kunt toch op een hele simpele manier ALLE posts aanpassen???

vb, weet niet of het werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$i = 0;
$sql = "select timestamp, id form posts";
$query = mysql_query($sql) or die("FOUT");
while ($post = mysql_fetch_array($query))
{
   $tijdarray = ... // split de huidige time op de juiste wijze
   $unixtime = mktime(xxxxxxxx); // verzin een goede code aub
  $sql = "UPDATE SET timestamp = '$unixtime' WHERE id = '$post[id]'";
  $query = mysql_query($sql) or die ("oeps");
  $i++
}
print "$i timestamps aangepast";
?>

zoiets dus, duurt wel even trouwens...

Verwijderd

Ik dacht dat de knul graag een timestamp in zijn mysql dbase wou en het met php laten zien..

Verwijderd

Topicstarter
Ok, het werkt allemaal ! Bedankt! *D

Zo heb ik het opgelost:
PHP:
1
2
3
4
5
<?
$time = mktime();
$time = $time + $adjusttime;
$timestamp = date("YmdHis", "$time");
?>

Die $adjusttime heb ik in mijn config.php staan, en daar kun je dus simpel invullen hoeveel seconden erbij of eraf moeten ;)
Pagina: 1