Optellen met date in PHP

Pagina: 1
Acties:
  • 321 views sinds 30-01-2008

  • Darkprince1234
  • Registratie: Juni 2005
  • Laatst online: 14-08-2021
Ik wil graag het volgende maken:


Bij uitvoering van het script wordt de datum geinjecteerd in een veld, nu wil ik dat die datum die wordt ingevoegd 30 dagen in de toekomst is gezien vanaf de huidige datum.

Ik weet niet hoe je mag rekenen met tijd in php, maar de datum in een var stoppen doe ik met:
$date = date("Y-m-d");


Dan wil ik daar dus 30 dagen bij optellen, maar hoe?

Een ideetje:
$date = $date + date("0-0-30");

Maar dit werkt dus niet, iemand suggesties?

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Als tweede argument van date kun je de unix timestamp meegeven. Dit is het aantal seconden sinds 1 januari 1970. De huidige waarde kun je opvragen met time(). Bij deze waarde kun je het aantal seconden in 30 dagen (30*24*3600) makkelijk optellen.

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 18-11 12:58

kokx

WIN

In php werk je met unix timestamps, de tijd sinds 1 jan 1970.

Deze tijd verkrijg je door de functie time().

Hier kun je heel simpel 30 dagen bij optellen:

dagen * uren * minuten * seconden
30 * 24 * 60 * 60

Beter gezegd, je doet gewoon dit:
PHP:
1
2
<?php
$time = (30 * 24 * 60 * 60) + time();


Edit:
Zoals GlowMouse al zei, je kan een 2e parameter toevoegen aan de date functie, en dan neemt hij de tijd van die dag.

[ Voor 16% gewijzigd door kokx op 24-06-2007 17:38 ]


Verwijderd

GlowMouse schreef op zondag 24 juni 2007 @ 17:34:
Als tweede argument van date kun je de unix timestamp meegeven. Dit is het aantal seconden sinds 1 januari 1970. De huidige waarde kun je opvragen met time(). Bij deze waarde kun je het aantal seconden in 30 dagen (30*24*3600) makkelijk optellen.
Inderdaad. Sowieso is het handig om zoveel mogelijk met die unix timestamps te werken. Werkt echt een pak handiger, geen gezever over data converteren, minder last met zomer/winteruur enzo.

  • Blaise
  • Registratie: Juni 2001
  • Niet online
GlowMouse schreef op zondag 24 juni 2007 @ 17:34:
Als tweede argument van date kun je de unix timestamp meegeven. Dit is het aantal seconden sinds 1 januari 1970. De huidige waarde kun je opvragen met time(). Bij deze waarde kun je het aantal seconden in 30 dagen (30*24*3600) makkelijk optellen.
Daarvoor is strtotime() bedacht.

  • GlowMouse
  • Registratie: November 2002
  • Niet online
strtotime('+30 days') lijkt me een stuk trager dan time()+3600*24*30.

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 18-11 12:58

kokx

WIN

Voor de wiskundigen is de oplossing die ik en GlowMouse gebruikten wat beter. 90% van de programmeurs is toch wiskundig aangelegd, dus de meesten zullen dat heel graag gebruiken.

Verder gebruik ik altijd de SQL DATETIME functies, hiermee kun je ook converteren naar time(), maar je kunt ook tijden op een andere manier selecteren, wat ik handiger vind.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

kokx schreef op zondag 24 juni 2007 @ 17:52:
Verder gebruik ik altijd de SQL DATETIME functies, hiermee kun je ook converteren naar time(), maar je kunt ook tijden op een andere manier selecteren, wat ik handiger vind.
Maar dat is alleen te gebruiken als je ook gebruik maakt van een SQL server, en daarnaast is dat nog afhankelijk van welke server, zo heeft MySQL weer andere functies dan MSSQL om maar even iets te noemen ;)
Dus waarom moeilijk doen als je diezelfde functies ook gewoon in PHP kan gebruiken :?

  • robbert
  • Registratie: April 2002
  • Laatst online: 18:50
Houdt er wel rekening mee dat 30 dagen niet altijd gelijk is aan 30 * 24 * 60 * 60 secondes, te denken aan zomer/wintertijd, schrikkelsecondes, etc.

Dus gebruik strtotime :), secondes erbij optellen zal inderdaad wel sneller zijn. Maar tenzij je die functie polynoom of exponentieel vaak aan moeten roepen zou ik me er niet druk om maken.

[ Voor 32% gewijzigd door robbert op 24-06-2007 18:01 ]


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 28-11 20:43

chem

Reist de wereld rond

GlowMouse schreef op zondag 24 juni 2007 @ 17:48:
[...]

strtotime('+30 days') lijkt me een stuk trager dan time()+3600*24*30.
ongeveer 10x zo traag bij 100k iteraties of 2x zo traag bij 1k iteraties, maar bij 1 call (of 1000) zou ik me daar geen zorgen over maken als het de leesbaarheid ten goede komt, en je die 'offset' dus ook in een ander bestand (config) leesbaar kan neerzetten.

[ Voor 3% gewijzigd door chem op 24-06-2007 18:02 ]

Klaar voor een nieuwe uitdaging.


  • Darkprince1234
  • Registratie: Juni 2005
  • Laatst online: 14-08-2021
Stel ik wil met time() werken, en ik doe het volgende:

$time = (30 * 24 * 60 * 60) + time();
$sql2 = "UPDATE status SET aanvraagdatum = '$time' WHERE gebruiker_id = $_POST[id]";

Dan blijft de tijd gewoon: 0000-00-00

Misschien heeft het met de format van het veld te maken? (TYPE is DATA en NULL is NOT NULL)

  • robbert
  • Registratie: April 2002
  • Laatst online: 18:50
Darkprince1234 schreef op zondag 24 juni 2007 @ 18:02:
Stel ik wil met time() werken, en ik doe het volgende:

$time = (30 * 24 * 60 * 60) + time();
$sql2 = "UPDATE status SET aanvraagdatum = '$time' WHERE gebruiker_id = $_POST[id]";

Dan blijft de tijd gewoon: 0000-00-00

Misschien heeft het met de format van het veld te maken? (TYPE is DATA en NULL is NOT NULL)
FROM_UNIXTIME

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

robbert schreef op zondag 24 juni 2007 @ 18:00:
Houdt er wel rekening mee dat 30 dagen niet altijd gelijk is aan 30 * 24 * 60 * 60 secondes, te denken aan zomer/wintertijd, schrikkelsecondes, etc.
Daarom moet je als het even kan gewoon altijd in UTC werken, heb je daar geen last van zomer of wintertijd.

  • Darkprince1234
  • Registratie: Juni 2005
  • Laatst online: 14-08-2021
Zou je dat voor mij kunnen implementeren in mijn kleine stukje code?

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 18-11 12:58

kokx

WIN

Dat is een MySQL functie, dus dat gebruik je in deze zin:

PHP:
1
2
<?php
$sql = "... aanvraagdatum = FROM_UNIXTIME('$time') ...";

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:39

gorgi_19

Kruimeltjes zijn weer op :9

Darkprince1234 schreef op zondag 24 juni 2007 @ 18:13:
[...]


Zou je dat voor mij kunnen implementeren in mijn kleine stukje code?
Voorbeelden zijn toch met Google ook te vinden? :)
Zie Google link :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Rexomnium
  • Registratie: September 2000
  • Laatst online: 14:55

Rexomnium

Vincam aut moriar

Ik gebruik ook wel eens date en mktime hiervoor:
PHP:
1
2
3
4
5
6
$date = 
date
(
          "Ymd", 
          mktime(0,0,0,date("m"),date("d")+30,date(y))
);

We zijn allemaal vaandeldrager in een optocht van gekwetsten.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Darkprince1234 schreef op zondag 24 juni 2007 @ 18:13:
[...]


Zou je dat voor mij kunnen implementeren in mijn kleine stukje code?
Dat kan hij waarschijnlijk prima maar het is hier geen MacDonalds om even snel een stukje code af te halen. Hier programmeren we zelf. Met de gegeven tips zou je er uit moeten kunnen komen. Dit staat netjes uitgelegd in Programming Beleid dus als je die eens door zou willen lezen dan graag :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.