WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP Hjälp, Date och Time, addering (https://www.wn.se/forum/showthread.php?t=4008)

micze 2004-10-09 23:09

Ok jag behöver lite hjälp med PHP,
försöker att göra ett add värde på tid och datum,

så här e fallet i alla fall,
jag hämtar ett datum som e sparat i databasen,
sen vill jag att det ska gämnföra med ett värde av +14 dagar,
ex.

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d") + 14 dagar;

if ($date < $nydate) {
}


samma med fallet av tid.
en kompis förklarade för ett tag sen, glömde att skriva ner vad han sa :(

cornelii 2004-10-09 23:50

<?php

//Obs denna lösning år inte skottårs säker. Då blir det jobbigt ta fram böcker och sånt. Men det kan du kanske själv göra?
// Cornelii Sandberg
$futurum = 14;

if(date("m")%2 == 1 && date("m") <> 02)
{
if((date("d")+ $futurum) > 31 )
{
$dag = $futurum - (31 - date("d"));
$manad = date("m") + 1;
} else {
$dag = date("d")+14;
$manad = date("m");
}
}
if(date("m")%2 == 0 && date("m") <> 02)
{
if((date("d")+ $futurum) > 30 )
{
$dag = $futurum - (30 - date("d"));
echo (30 - date("d"))."
";
$manad = date("m") + 1;
} else {
$dag = date("d")+14;
$manad = date("m");
}
}
if(date("m") == 02)
{
if((date("d")+ $futurum) > 28)
{
$dag = $futurum - (28- date("d"));
$manad = date("m") + 1;
} else {
$dag = date("d")+14;
$manad = date("m");
}
}
echo $manad."-".$dag.";
?>

Mikael Simonsson 2004-10-10 01:51

Om jag har förstått dig rätt:

Kod:

<?php

// Från databasen:
$iOldDate = strtotime('2004-10-04 22:01');

// Nu + 14 dagar
$iNewDate = time() + (60*60*24*14);

if ( $iNewDate > $iOldDate )
{
  echo '...';
}

?>


kullervo 2004-10-10 19:25

Ett tips är att kolla i manualen. Funktionen date() kan nämligen ta emot ett till argument.

$datum = date("Y-m-d");
$om_två_veckor = date("Y-m-d", time() + 3600 * 24 * 14);

Jonas 2004-10-10 23:20

*SUCKAR*


Lär er PHP innan ni postar sjuk kod...

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

if ($date < $nydate) {
}


kullervo 2004-10-11 00:27

Citat:

Originally posted by Jonas@Oct 10 2004, 23:20
*SUCKAR*


Lär er PHP innan ni postar sjuk kod...

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

if ($date < $nydate) {
}


Ja, det är ju ännu en metod. Vad är det som är så tokigt att addera 2 veckor till now istället för att låta strtotime() addera 2 veckor till now?

micze: Spana in strtotime() också. Mycket kraftfull när man vill mecka med tid.

Jonas 2004-10-11 02:04

Citat:

Originally posted by kullervo@Oct 11 2004, 00:27
Ja, det är ju ännu en metod. Vad är det som är så tokigt att addera 2 veckor till now istället för att låta strtotime() addera 2 veckor till now?

micze: Spana in strtotime() också. Mycket kraftfull när man vill mecka med tid.

Kod:

$datum = date("Y-m-d");
$om_två_veckor = date("Y-m-d", time() + 3600 * 24 * 14);

Onödigt att beblanda det på det sättet när det finns funktioner till det.

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

Enkelt, snabbt och gör PRECIS vad det skall göra.

cornelii 2004-10-11 08:20

Citat:

$nydate = date("Y-m-d",strtotime('+2 week'));
Lite enklare än min cp-lösning men som säkert framgår har jag inte råkat ut för speciellt många kalender uppdrag för då hade man behövt kolla upp det här.

Funkar ju bra med $nydate = date("Y-m-d",strtotime('+2 days')); oxå.

kullervo 2004-10-11 11:30

Det här svaret är helt principiellt.

Citat:

Onödigt att beblanda det på det sättet när det finns funktioner till det.
Jag förstår inte vad som är onödigt. Mitt sätt var ju "raka rör" istället för att blanda in nån funktion som kan räkna ut hur länge två veckor är (vilket jag lärde mig i förskolan så jag behöver inte hjälp med att räkna ut det). Du tog helt enkelt orden ur munnen på mig - Det borde ha varit jag som sa så.


Citat:

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

Enkelt, snabbt och gör PRECIS vad det skall göra.

...plus lite till. Som sagt. Man behöver ingen mirakelfunktion för att räkna ut hur länge 2 veckor varar. Dessutom blir koden, förutom hälften så snabb, krångligare då man måste känna till vad strtotime() är. En person som inte känner till vad strtotime('+2 week') gör borde ju anta att den gör mycket mer än att bara adderar 2 veckor med now, eftersom personen tänker att "om det var så enkelt, varför inte bara addera 2 veckor utan någon specialfunktion?".

Mikael Simonsson 2004-10-11 20:34

Citat:

Originally posted by Jonas@Oct 10 2004, 23:20
*SUCKAR*

Lär er PHP innan ni postar sjuk kod...

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

if ($date < $nydate) {
}


Jonas om du tycker vi postar sjuk kod så måste jag fråga varför du använder funktionen date()? date() returnerar en sträng, t.ex. '2004-10-11' (beronde på inparameter förstås). Det är samma sak som att skriva:

Kod:

if ( '2004-10-11' < '2004-10-25' )
{
 ...
}

Väldigt opålitligt med andra ord.

Det finns flera anledningar till att PHP använder timestamps (integer) internt, och en av dessa är effektivitet. Så min rekommendation till alla här är att jobba med timestamps istället, spara timestamps i databasen och konvertera till / från sträng endast när det är nödvändigt.

(Jonas detta är inget påhopp med att skriva en sån sak är bara onödigt.)

Jonas 2004-10-11 20:38

Citat:

Ursprungligen postat av Mikael Simonsson
Citat:

Ursprungligen postat av Jonas
*SUCKAR*

Lär er PHP innan ni postar sjuk kod...

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

if ($date < $nydate) {
}


Jonas om du tycker vi postar sjuk kod så måste jag fråga varför du använder funktionen date()? date() returnerar en sträng, t.ex. '2004-10-11' (beronde på inparameter förstås). Det är samma sak som att skriva:

Kod:

if ( '2004-10-11' < '2004-10-25' )
{
 *...
}

Väldigt opålitligt med andra ord.

Det finns flera anledningar till att PHP använder timestamps (integer) internt, och en av dessa är effektivitet. Så min rekommendation till alla här är att jobba med timestamps istället, spara timestamps i databasen och konvertera till / från sträng endast när det är nödvändigt.

(Jonas detta är inget påhopp med att skriva en sån sak är bara onödigt.)

Jag är medveten om att det levereras i ett sådant format. Men eftersom hans exempel var det och jag bara visade att man behöver inte 50000kilometer kod för att göra en sak snabbt med en enkel funktion som är gjord för ändamålet.

kullervo 2004-10-11 21:58

Citat:

Ursprungligen postat av Mikael Simonsson
Citat:

Ursprungligen postat av Jonas
*SUCKAR*

Lär er PHP innan ni postar sjuk kod...

Kod:

$date = date("Y-m-d");
$nydate date("Y-m-d",strtotime('+2 week'));

if ($date < $nydate) {
}


Jonas om du tycker vi postar sjuk kod så måste jag fråga varför du använder funktionen date()? date() returnerar en sträng, t.ex. '2004-10-11' (beronde på inparameter förstås). Det är samma sak som att skriva:

Kod:

if ( '2004-10-11' < '2004-10-25' )
{
 *...
}

Väldigt opålitligt med andra ord.

Det finns flera anledningar till att PHP använder timestamps (integer) internt, och en av dessa är effektivitet. Så min rekommendation till alla här är att jobba med timestamps istället, spara timestamps i databasen och konvertera till / från sträng endast när det är nödvändigt.

(Jonas detta är inget påhopp med att skriva en sån sak är bara onödigt.)

Du är nog den ända som uppmärksammade vad som EGENTLIGEN skulle göras :) . Självklart är unix timestamp bättre att använda i det här fallet.

matlin 2004-11-12 11:56

Kod:

if (time() < strtotime('+2 week')) {}
med andra ord ...
En annan funktion som jag gillar är:
Kod:

$fjortondarsenare = mktime (12, 0, 0, date("m"), date("d")+14, date("Y"));
vilket ger mer kod iofs.

Tvartom 2004-11-14 18:51

Spara värdena efter SQL:s egna datatyper för datum, exportera de sedan med:
Kod:

SELECT UNIX_TIMESTAMP(tid) AS mintid FROM ...
om du behöver unix-format!

På andra hållet blir det:
Kod:

INSERT INTO tbl (tid) VALUES (FROM_UNIXTIME(unixtimestamp))

Mycket av jämförelser kan läggas in i SQL-frågan:
Kod:

SELECT id, tid FROM tbl WHERE tid < NOW() + INTERVAL 14 DAY
(Det skall gå med WEEK med, men jag får det inte att funka)

eller kanske
Kod:

SELECT id, tid, IF(tid < NOW() + INTERVAL 14 DAY, 1, 0) AS snart FROM tbl
Beroende på vad som ska göras!


Alla tider är GMT +2. Klockan är nu 18:52.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson