Jump to content
php.lv forumi

Skripts, kas rēķina nedēļu sākuma un beigu laiku


andrisp

Recommended Posts

Ir viens dīvaina paskata kods, kam būtu jāizdrukā laiki pa nedēļām.

Tipa pirmajā rindiņa ir šīs nedēļas sākuma laiks un beigu laiks.

Nākamās ir rindiņas ir par vienu nedēļu atpakaļ utt. un tā tik uz atpakaļu.

 

Jautājums - kāpēc pa starpu vairākām nedēļām tiek nepareizi izrēķināts sākuma laiks nedēļai ?

 

Izpildiet skriptu, tad būs skaidrs par ko runāju.

 

Varbūt to visu var kaut kā daudz labāk uzrakstīt ?

 

$s = strtotime('next sunday');
for ($i=0;$i<=100;$i++) {
$lt = date('d-m-Y H:i:s', $s + 86399);
$gt = date('d-m-Y H:i:s', $s - 604800 + 86400);
echo $gt.' - '.$lt.'<br />';
$s -= 604800;
}

 

UPD: Tas man būs vajadzīgs, lai atlasītu no mysql datubāzes ierakstus pa nedēļām. Varbūt es vispār nepareizi tam visam pieeju ? Var būt var kaut kā pavisam savādāk ?

 

Tabula ir tāda:

datums (DATETIME) | summa (DOUBLE) | skaits (INT)

 

Vajadzība ir atlasīt visus ierakstus sākot no aktuālās nedēļas šādā formātā

 

Laika posms (Šī nedēļa) - Kopskaits - Kopsumma

Laika posms (Pagājušnedēļa) - Kopskaits - Kopsumma

Laika posms (Aizpagājuš.) - Kopskaits - Kopsumma

utt

Edited by andrisp
Link to comment
Share on other sites

tas nav tas... kļūda notiek pie mēnešu pārejas, izskatās ka kaut kāds bugs...

 

$r = 7*24*60*60;
$a = 1143925199;
$b = 1143320400;

print date( 'd-m-Y H:i:s', $b);
print date( 'd-m-Y H:i:s', $b+$r);

 

= 25-03-2006 23:00:00

= 02-04-2006 00:00:00

 

Tā kā mēs skaitam klāt tikai veselas dienas, laikam bija jāpaliek tādam pašam

 

 

UPD3:

Ha ha ha....

 

$s = strtotime('next sunday');
for ($i=0;$i<=100;$i++) {
$lts = $s-1;
$gts = strtotime('-1 week',$s);
$lt = date('d-m-Y H:i:s', $lts);
$gt = date('d-m-Y H:i:s', $gts);
echo $gt.'('.$gts.') - '.$lt.'('.$lts.')  ['.$r.' / '.($lts-$gts).']<br />';
$s = strtotime('-1 week',$s);
}

 

 

09-04-2006 00:00:00(1144530000) - 15-04-2006 23:59:59(1145134799) [604800 / 604799]

02-04-2006 00:00:00(1143925200) - 08-04-2006 23:59:59(1144529999) [604800 / 604799]

26-03-2006 00:00:00(1143324000) - 01-04-2006 23:59:59(1143925199) [604800 / 601199]

19-03-2006 00:00:00(1142719200) - 25-03-2006 23:59:59(1143323999) [604800 / 604799]

12-03-2006 00:00:00(1142114400) - 18-03-2006 23:59:59(1142719199) [604800 / 604799]

Edited by Delfins
Link to comment
Share on other sites

25-03-2006 23:00:00

02-04-2006 00:00:00

 

Šogad laiks tika pagriezts vienu stundu uz priekšu 26. martā, tā kā domāju, ka tomēr tur tā vaina. Tikai jāizdomā kā atrisināt.

 

Varbūt kautkā var norādīt date fjai, lai ignorē tos daylight saving times ?

 

UPD:

 

Īsti nesapratu, ko tu tajā kodā dari. Kas ir $r ?

Edited by andrisp
Link to comment
Share on other sites

$r nav vajadzīgs... izmanto `-1 week` lai Daylight saving būtu iekļauts

$s = strtotime('next sunday');
for ($i=0;$i<=100;$i++) {
$gts = strtotime('-1 week',$s);
$lt = date('d-m-Y H:i:s', $s-1);
$gt = date('d-m-Y H:i:s', $gts);
echo $gt.' - '.$lt.'<br />';
$s = $gts;
}

Edited by Delfins
Link to comment
Share on other sites

Paldies, šis strādā labi.

 

Vēl viens jautājums:

Kā labāk salīdzināt datumus ?

 

Šādi ?

echo ('2005-05-23 23:06:01' >= '2005-05-23 23:02:01');

 

vai tomēr konvertēt abus datumus uz unix_timestamp un tad salīdzināt ?

Link to comment
Share on other sites

×
×
  • Create New...