[php] Datum valideren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SirikOnline
  • Registratie: Januari 2002
  • Laatst online: 29-11-2023
Uiteraard is het makkelijk om een datum te valideren, maar ik zit even met het volgende.

Ik krijg datums aangeleverd in all smaken de meeste zijn wel af te vangen maar nu krijg ik.

- "Oktober 2011" dus zonder de dag, als ik dit dus door strftime heen haal krijg ik gewoon 01-10-2011.

Iemand een idee hoe dit goed af te vangen ik doe nu het volgende

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function is_date( $str )
    {
      $stamp = strtotime( $str );
     
      if (!is_numeric($stamp))
      {
         return FALSE;
      }
      $month = date( 'm', $stamp );
      $day   = date( 'd', $stamp );
      $year  = date( 'Y', $stamp );
     
      if (checkdate($month, $day, $year))
      {
         return TRUE;
      }
     
      return FALSE;
    }
van php.net

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SirikOnline schreef op maandag 05 september 2011 @ 19:04:

- "Oktober 2011" dus zonder de dag, als ik dit dus door strftime heen haal krijg ik gewoon 01-10-2011.
En wat is precies je probleem dan :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat had je anders verwacht? PHP kan de echte dag niet raden natuurlijk en de eerste van de maand is net zo goed als elke andere gok. En als je bedoelt dat je helemaal geen dag wil terugkrijgen: dan is het geen datum meer en is een date dus ook niet geschikt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Kijk eens naar strtotime (PHP Manual). Daarmee kun je makkelijk checken of de datum een geldige datum is en krijg je een timestamp terug ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Punt is dat hij wel vergevingsgezind wil zijn en blijkbaar diverse strings naar een datum wil omzetten. Maar "Oktober 2011" is helemaal geen datum, terwijl strtotime het wél naar een datum omzet. Dat wij hij kennelijk niet. Dus alleen omzetten naar een datum als het ook echt een specifieke datum is, en anders niet.

@hieronder: Lees anders de 1e post nog eens, maar dan goed.

[ Voor 9% gewijzigd door Verwijderd op 05-09-2011 19:18 ]


Acties:
  • 0 Henk 'm!

  • SirikOnline
  • Registratie: Januari 2002
  • Laatst online: 29-11-2023
Klopt allemaal, maar ik wil in het geval van "Oktober 2011" false terug krijgen ik heb dus "dag, maand, jaar" nodig ook al is Oktober 2011 valid volgens strftime

[ Voor 5% gewijzigd door SirikOnline op 05-09-2011 19:18 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

SirikOnline schreef op maandag 05 september 2011 @ 19:17:
Klopt allemaal, maar ik wil in het geval van "Oktober 2011" false terug krijgen ik heb dus "dag, maand, jaar" nodig ook al is Oktober 2011 valid volgens strftime
Dan zul je handmatig moeten kijken naar alle mogelijke vormen voor de string. Een preg_split op spaties of streepjes en dan tellen of er 3 elementen in het resulterende array zitten (eventueel alleen wanneer de resulterende datum op de eerste van de maand valt) zou redelijk in de richting komen denk ik, maar helemaal waterdicht is dat niet als je vergevingsgezind wil blijven voor de overige "malformed" dates.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SirikOnline
  • Registratie: Januari 2002
  • Laatst online: 29-11-2023
Ok ga ik dat even proberen, bedankt voor de hulp

Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
probeer niet TE soepel om te gaan met invoer van data. Je moet het jezelf niet al te moeilijk maken door te veel formaten toe te laten. Tenzij je hiervoor een hele goede reden hebt, kun je beter alleen vaste formaten toelaten!

Acties:
  • 0 Henk 'm!

  • SirikOnline
  • Registratie: Januari 2002
  • Laatst online: 29-11-2023
Snap ik maar ik krijg deze data aangeleverd van een hele grote partij, waar geen invloed op uit kan oefenen ;)

Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
dan is de optie van NMe een goede of de aanname doen dat oktober 2011 ook als 1 oktober 2011 ingevuld mag worden, beetje afhankelijk waarvoor de datum gebruikt wordt natuurlijk ;)

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
SirikOnline schreef op maandag 05 september 2011 @ 19:35:
Snap ik maar ik krijg deze data aangeleverd van een hele grote partij, waar geen invloed op uit kan oefenen ;)
Bedoel je ook echt 1 partij?

Want het lijkt me dat die intern ook maar met een (aantal) datumconventies werken, Bel ze op, vraag het ze en prog dan enkel vanuit die conventies ipv van alles maar soep proberen te maken en daarna de ergste fouten er weer uit te filteren.

Acties:
  • 0 Henk 'm!

  • SirikOnline
  • Registratie: Januari 2002
  • Laatst online: 29-11-2023
Gomez12 schreef op maandag 05 september 2011 @ 20:12:
[...]

Bedoel je ook echt 1 partij?

Want het lijkt me dat die intern ook maar met een (aantal) datumconventies werken, Bel ze op, vraag het ze en prog dan enkel vanuit die conventies ipv van alles maar soep proberen te maken en daarna de ergste fouten er weer uit te filteren.
Is een amerikaanse partij, ik gebruik een api van ze maar ik zal het in hun ticket systeem is doorgeven.

Heb nu van NMe de preg_split toegepast en dan tel ik gewoon dat ik groter dan 2 arrays moet hebben en dat lijkt momenteel goed te gaan :).

thnx

Acties:
  • 0 Henk 'm!

  • Ulster Seedling
  • Registratie: December 2007
  • Laatst online: 12-09 12:33

Ulster Seedling

“Middelgrote appel”

Denk je ook aan data als 02-04-2011? 2 april, of 4 februari? Ik weet het niet zeker, en PHP evenmin ;-)

“(…) met een rode blos op een geelgroene ondergrond.” Volgens Wikipedia tenminste.


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
jhogervorst schreef op maandag 05 september 2011 @ 21:14:
Denk je ook aan data als 02-04-2011? 2 april, of 4 februari? Ik weet het niet zeker, en PHP evenmin ;-)
Maar als het goed is weet de API-beschrijving het wel...

Acties:
  • 0 Henk 'm!

Verwijderd

Of gooi het anders terug naar de gebruiker die Oktober 2011 invoerde.

Dus, laat de validatie aan de gebruiker, in de vorm van een bevestigingsscherm.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op maandag 05 september 2011 @ 21:16:
Of gooi het anders terug naar de gebruiker die Oktober 2011 invoerde.

Dus, laat de validatie aan de gebruiker, in de vorm van een bevestigingsscherm.
Hoe zie je dat exact voor je? Je krijgt data aangeleverd vanuit een 3e partij, dan ga je de gebruikers een mailtje sturen of zo iets of ze de data willen aanpassen?

Acties:
  • 0 Henk 'm!

  • SeatRider
  • Registratie: November 2003
  • Nu online

SeatRider

Hips don't lie

Gomez12 schreef op maandag 05 september 2011 @ 21:26:
[...]

Hoe zie je dat exact voor je? Je krijgt data aangeleverd vanuit een 3e partij, dan ga je de gebruikers een mailtje sturen of zo iets of ze de data willen aanpassen?
Waar exact in de TS stond dat de data asynchroon werd aangeleverd?

Nederlands is makkelijker als je denkt


Acties:
  • 0 Henk 'm!

Verwijderd

Gomez12 schreef op maandag 05 september 2011 @ 21:26:
[...]

Hoe zie je dat exact voor je? Je krijgt data aangeleverd vanuit een 3e partij, dan ga je de gebruikers een mailtje sturen of zo iets of ze de data willen aanpassen?
Ik ken de achtergrond niet. Ik ging er, mogelijk onterecht, vanuit dat het ging om, bijvoorbeeld, een registratie systeem of iets dergelijks voor een website.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

jhogervorst schreef op maandag 05 september 2011 @ 21:14:
Denk je ook aan data als 02-04-2011? 2 april, of 4 februari? Ik weet het niet zeker, en PHP evenmin ;-)
PHP gaat bij 02-04-2011 uit van dd-mm-yyyy en bij 02/04/2011 van mm/dd/yyyy dus als dat consequent gebeurt hoeft het geen probleem te zijn.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1