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.
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.
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.
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.
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...
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.
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?
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?
135 ms totalt · 3 externa anrop · v20260731065814-full.9823c0c5