Avatar billede jps2mt Nybegynder
28. april 2003 - 21:55 Der er 7 kommentarer og
1 løsning

Læg dage/uger/måneder/år til dato

Jeg er ved at lave et script hvor jeg har brug for at lægge hhv. dage, uger, måneder og år til en given dato...Ikke alle sammen på en gang...

F.eks.
$Dato = "2003-04-28"
$addOn = "1 wk" //Altså 1 uge, kunne have været 1 dg, 1 wk, 1 md eller 1 yr for hhv. 1 dag, 1 uge, 1 måned og 1 år

Hvad gør jeg så lige for at lægge det til??
Synes ikke lige jeg selv kan se hvordan...
Avatar billede jps2mt Nybegynder
28. april 2003 - 21:58 #1
Sorry datoformatet var forkert, skulle selvf' være 28-04-2003...
Avatar billede postndk Nybegynder
28. april 2003 - 21:58 #2
split $Dato op i dag måned og år,
og find timestamp på det med mktime()

læg 1 dg, en uge osv til vha.

1 dg = 24*60*60 = 86400 (for at finde antal sek på en dag)
1 wk = 86400*7
osv osv ...
det lægger du til det result du har fundet med mktime()

så kan du udskrive det hele med :
echo date()

er du med ?
Avatar billede jps2mt Nybegynder
28. april 2003 - 22:04 #3
Lige bortset fra hvordan du vil finde timestamp'et på det oprindelige, tror jeg fint jeg er med...
Avatar billede postndk Nybegynder
28. april 2003 - 22:11 #4
kig på mktime();

noget med

$t = mktime(0,0,0,4,28,2003);
echo $t; // giver timestamp
Avatar billede jakoba Nybegynder
28. april 2003 - 22:17 #5
Det er grumme svært at lægge måneder til en dato da måneder har forskellig længde.
  idag + 1 måned kan være + 31 dage eller + 27 dage (eller indimellem). vølg selv.
for at lægge måneder til må du definere præcis hvordan det skal gøres.

Dage er der ingen problemer med, men år har igen forskellig længde (er det et skudår vi lægger til?)

mvh JakobA
Avatar billede jps2mt Nybegynder
28. april 2003 - 22:33 #6
function editMemberOnly($_file) {
  $result = mysql_query("SELECT DATE_FORMAT(Added, '%d-%m-%Y') AS Dato,Closed FROM Download WHERE (Filnavn = '$_file')");
  $row = mysql_fetch_array($result);
  $tmpMemberOnly = $row[Closed];
  $arrMemberOnly = explode(" ", $tmpMemberOnly);

  $calcDay = 24 * 60 * 60; // En dag i skunder
  $calcWeek = $calcDay * 7; // En uge i sekunder
  $calcMonth = $calcDay * 30; // En måned (regner med at alle måneder er 30 dage) i sekunder
  $calcYear = $calcDay * 365; // Et år (regner med at alle år er 365 dage) i sekunder

  $tmpDate = explode("-", $row[Dato]);
  $tmpTimestamp = mktime(0,0,0,$tmpDate[0],$tmpDate[1],$tmpDate[2]);

  $selString = "<select name=\"valForm\">";

  if ($arrMemberOnly[1] == "dg") {
  $selString .= "<option value=\"dg\" selected>Day(s)</option>\n";
  $selString .= "<option value=\"wk\">Week(s)</option>\n";
  $selString .= "<option value=\"md\">Month(s)</option>\n";
  $selString .= "<option value=\"yr\">Year(s)</option>\n";
  $tmpAddOn = $calcDay * $arrMemberOnly[0];
  } else if ($arrMemberOnly[1] == "wk") {
  $selString .= "<option value=\"dg\">Day(s)</option>\n";
  $selString .= "<option value=\"wk\" selected>Week(s)</option>\n";
  $selString .= "<option value=\"md\">Month(s)</option>\n";
  $selString .= "<option value=\"yr\">Year(s)</option>\n";
  $tmpAddOn = $calcWeek * $arrMemberOnly[0];
  } else if ($arrMemberOnly[1] == "md") {
  $selString .= "<option value=\"dg\">Day(s)</option>\n";
  $selString .= "<option value=\"wk\">Week(s)</option>\n";
  $selString .= "<option value=\"md\" selected>Month(s)</option>\n";
  $selString .= "<option value=\"yr\">Year(s)</option>\n";
  $tmpAddOn = $calcMonth * $arrMemberOnly[0];
  } else if ($arrMemberOnly[1] == "yr") {
  $selString .= "<option value=\"dg\">Day(s)</option>\n";
  $selString .= "<option value=\"wk\">Week(s)</option>\n";
  $selString .= "<option value=\"md\">Month(s)</option>\n";
  $selString .= "<option value=\"yr\" selected>Year(s)</option>\n";
  $tmpAddOn = $calcYear * $arrMemberOnly[0];
  }

  $selString .= "</select>\n";

  $tmpTimestamp = $tmpTimestamp + $tmpAddOn;

  $outDate = date('d-m-Y', $tmpTimestamp);

  echo $outDate;
}

Sådan ser funktionen ud, men tilføjer jeg 1 måned til, i det tilfælde jeg sidder og tester med, 21-03-2003 giver det et resultat der hedder 03-10-2004, hvilket selvsagt ikke passer helt som det burde :)
Avatar billede jps2mt Nybegynder
28. april 2003 - 22:38 #7
Det skal lige dertil siges at $arrMemberOnly[0] indeholder det antal dage/uger/måneder/år som det drejer sig om og $arrMemberOnly[1] indeholder formatet vi snakker om (her tænkes på dage/uger/osv...)
Avatar billede jps2mt Nybegynder
28. april 2003 - 23:09 #8
Fejlen lå her:

$tmpTimestamp = mktime(0,0,0,$tmpDate[0],$tmpDate[1],$tmpDate[2]);

skulle være:

$tmpTimestamp = mktime(0,0,0,$tmpDate[1],$tmpDate[0],$tmpDate[2]);

Tnx...Det virker som det skal nu...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester