webForumDet fria alternativet

Validera timestamp

10 svar · 325 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 447 inlägg
#1

Jag försöker hitta ett sätt att kolla att ett timestamp är ett giltigt datum. Jag har denna funktion som kollar vanliga datum:

function is_swedish_date($d) {
	// Rätt format?
	if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $d, $parts)) {
		// Giltigt datum?
		if (checkdate((int)$parts[2],(int)$parts[3],(int)$parts[1])) {
			return true;
		}
	}
	return false;
}

Men när jag ska hantera datum i unix-format blir det knas. Om jag kallar på funktionen enligt följande:

$date_unix = strtotime("$year-$month-$day");

if (is_swedish_date(date('Y-m-d',$startdate_unix))) {
}

så blir det fel eftersom strtotime gör om även ett ogiltigt datum till ett giltigt. 2004-02-31 blir t.ex. 2004-03-02. Visst kan jag gå runt problemet, men jag vill gärna kunna skapa en funktion för att enkelt kontrollera att en timestamp är ett giltigt datum.

MatteMedlem sedan aug. 20002 970 inlägg
#2

Men är det ett unix_timestamp så är det ett heltal mindre än eller lika med 31^2 - 1. Då är det det du ska kolla.

I ditt exempel har du år, månad och dag. Använd då checkdate för att kolla det.

Ska det sparas som unix_timestamp, gör det isåfall efter kontrollen.

Eller är det något jag missförstått ?

SkarreMedlem sedan apr. 20012 447 inlägg
#3

Nja du har väl egentligen inte missat något. Jag tänkte bara att jag skulle skriva en funktion som kunde kolla om en timestamp är ett giltigt datum. Exemplet kanske var otydligt, men det skulle vara smidigt med en sådan funktion i vissa situationer.

MatteMedlem sedan aug. 20002 970 inlägg
#4

Ett unix_timestamp är antalet sekunder sedan 1/1 1970 kl 00:00:00 GMT, så det man behöver kolla är att det är ett giltigt heltal, det är alltså inget datumformat.

Så länge det är ett heltal som är mellan 0 och 31^2 - 1 så är det giltigt.

SkarreMedlem sedan apr. 20012 447 inlägg
#5

Re: Validera timestamp

Jag är medveten om vad en timestamp är för någonting. :) Jag vill klura ut en funktion som kan kontrollera om en timestamp är ett giltigt datum. Se problematiken i första inlägget. Hursomhelst har jag löst det på annat sätt, men det skulle som sagt vara en användbar funktion i vissa lägen.

Skarre skrev:

Men när jag ska hantera datum i unix-format blir det knas. Om jag kallar på funktionen enligt följande:

$date_unix = strtotime("$year-$month-$day");

if (is_swedish_date(date('Y-m-d',$startdate_unix))) {
}

så blir det fel eftersom strtotime gör om även ett ogiltigt datum till ett giltigt. 2004-02-31 blir t.ex. 2004-03-02. Visst kan jag gå runt problemet, men jag vill gärna kunna skapa en funktion för att enkelt kontrollera att en timestamp är ett giltigt datum.

nkrantzMedlem sedan apr. 2002755 inlägg
#6

Jag har bara en fråga. I vilka lägen skulle funktionen komma till nytta? Om du har sparat en datum som en timestamp så är ju timestampen rätt. I vissa lägen så skriver kanske en användare in ett datum själv och då blir det ju lättare att kolla så att detta är rätt än att omvandla till timestamp och sedan kolla detta...

Bara nyfiken :)

SkarreMedlem sedan apr. 20012 447 inlägg
#7

Återigen: jag vill bara veta om det är möjligt att skapa en funktion för att enkelt kontrollera att en timestamp är ett giltigt datum? :)

MatteMedlem sedan aug. 20002 970 inlägg
#8

Och återigen, ett unix_timestamp är alltid ett giltigt datum, så länge det är ett giltigt timestamp.

Vad du kan kolla är att det är ett giltigt timestamp, alltså ett heltal mindre eller lika med 2^31-1.
Minsta tillåtna värde varierar mellan operativsystem. För windows är det t.ex. 0 (noll), för en del andra är det -2^31.

SkarreMedlem sedan apr. 20012 447 inlägg
#9

Matte, jag vet att du försöker hjälpa mig, men jag tror inte vi förstår varandra så jag tycker vi lämnar detta.

Skarre skrev:

[...] så blir det fel eftersom strtotime gör om även ett ogiltigt datum till ett giltigt. 2004-02-31 blir t.ex. 2004-03-02.

SPiNMedlem sedan mars 20005 832 inlägg
#10

Har du sett funktionen checkdate()?

Jag förstår inte riktigt vad du vill göra. Har du sedan tidigare datumet separerat i år, månad och dag - varför ska du göra om det till ett unix-timestamp?

lunne82Medlem sedan dec. 2003153 inlägg
#11

strtotime gör om även ett ogiltigt datum till ett giltigt. 2004-02-31 blir t.ex. 2004-03-02.

Men eftersom strtotime gör om det så är det ju ett giltigt datum. Om du inte är nöjd får du väl räkna ut ett timestamp själv genom att räkna hur många sekunder ditt datum är efter 1/1 1970 kl 00:00:00 GMT. Jag förstår vad du försöker göra, men jag ser ingen användning av en sådan funktion då det finns datumfunktioner att tillta. Dessutom är det väl användaren som skriver in ett knasigt datum som förlorar på det, eller?

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb