logi sisse meist KKK

Tere!

On vaja leida jooksva nädala ja eelmise nädala esmaspäev kuupäevana sõltumata hetke nädalapäevast. Arvan et strftime funktsioon peaks selleks sobima ja sai kasutada allolevat varinti:

$thisWeek = strftime('this monday -1 week');
$prevWeek = strftime('last week');

Hiljem avastasin, et antud variant toimib teisipäevast kuni pühapäevani v.a. pühapäev. Pühapäeval peab olema aga järgnev variant:

$thisWeek = strftime('this monday -1 week');
$prevWeek = strftime('last monday -1 week');

Kuid sellega veel asi ei lõppe. Esmaspäeval tuleb kasutada veel järgnevat varianti:

$thisWeek = strftime('this week');
$prevWeek = strftime('last monday');

Kas on mingi võimalus seda lahendada ühe variandiga sõltumata nädalapäevast? Äärmisel juhul võib olla ka kaks varianti, aga kolm on küll natuke liiast. Äkki on mingi muu ja parem võimalus?

küsitud May 22 '13 at 00:02

Okram's gravatar image

Okram
16123


Need "this monday" ja "last week" tüüpi avaldised on jubedalt platvormist sõltuvad ja paljudes keskkondades ei tööta üldse.

Kindlama lahenduse saab nii:

  • olgu $t uuritav ajahetk;
  • siis strftime('%w', $t) annab hetke $t sisaldava nädalapäeva numbri (pühapäev=0, esmaspäev=1, ..., laupäev=6);
  • seega (strftime('%w', $t)+6)%7 näitab, mitu päeva tagasi oli hetke $t sisaldava nädala esmaspäev;
  • seega $t-((strftime('%w', $t)+6)%7)*86400 annab ajahetke $t sisaldava ja $t-((strftime('%w', $t)+6)%7+7)*86400 sellele eelneva nädala esmaspäeva (hetkega $t sama kellaaja);
  • seega soovitud lõpptulemuse annavad $thisMonday = strftime('%x', $t-((strftime('%w', $t)+6)%7)*86400) ja $lastMonday = strftime('%x', $t-((strftime('%w', $t)+6)%7+7)*86400).

Jooksva aja saab muutujasse $t omistamisega $t = time(). Ja muidugi võib $thisMonday ja $lastMonday avaldistes '%x' asemele panna ka muu kuupäeva vormindamise tellimuse, võimalusi vt. PHP manuaalist.

link

vastatud May 22 '13 at 01:32

Ahto%20Truu's gravatar image

Ahto Truu ♦♦
6596711

Just see mis vaja. Ise oleks ma selleni ilmselt kolme päeva pärast jõudnud. Tõsi, kuna asi oli andmebaasi jaoks vajalik, siis '%x' sai '%F' asendatud. Toimib, töötab, tänud!

(May 22 '13 at 13:07) Okram

Ole hea, märgi ka Ahto vastus sellisel juhul parimaks (accepted).

(May 26 '13 at 11:24) Kaspar Kalve

This ja Last on ka mul pea segamini ajanud. Ma ei tea, kui palju platvorm mu lahendust mõjutab, aga seni on mul toiminud selline hea lühike kood käesoleva nädala esmaspäeva timestampi leidmiseks:

strtotime('00:00:00 sunday -1 week +1 day');

eelmine esmaspäev siis vastavalt:

strtotime('00:00:00 sunday -2 week +1 day');

Ei meeldi ülse eeldused, et päeva pikkus on mingi kindel arv sekundeid(või tunde), sest kõik päevad ei ole ju tegelikult ühepikkused. Sekunditega arvutades võib kahel päeval aastas oodata anomaaliaid.

link

vastatud Jun 02 '13 at 14:10

Alex's gravatar image

Alex
312

Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×22

küsitud: May 22 '13 at 00:02

nähtud: 2,913 korda

viimati uuendatud: Jun 02 '13 at 14:10

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee