A hetek napjainak dátumai

A hetek napjainak dátumai
2017-04-12T07:25:21+02:00
2017-04-13T05:32:50+02:00
2022-08-10T15:00:31+02:00
pesra
Sziasztok!

Azt szeretném megvalósítani, hogy az egyik ComboBox-ból kiválasztom az évet, a másikból a hétnek a számát az évben; tehát pl:

2017 21. hét hétfője, keddje, szerdája, ... milyen dátumra esik.

Hogyan lehetne ezt MySQL-ből lekérdezni?
Mutasd a teljes hozzászólást!
Hali!

Mivel említetted, hogy MySQL-ből is megfelelő, itt egy példa:
SET @year = 2017; SET @week = 15; SELECT STR_TO_DATE(CONCAT(@year, @week, ' Monday'), '%x%v %W') AS `monday` , STR_TO_DATE(CONCAT(@year, @week, ' Tuesday'), '%x%v %W') AS `tuesday` , STR_TO_DATE(CONCAT(@year, @week, ' Wednesday'), '%x%v %W') AS `wednesday` , STR_TO_DATE(CONCAT(@year, @week, ' Thursday'), '%x%v %W') AS `thursday` , STR_TO_DATE(CONCAT(@year, @week, ' Friday'), '%x%v %W') AS `friday` , STR_TO_DATE(CONCAT(@year, @week, ' Saturday'), '%x%v %W') AS `saturday` , STR_TO_DATE(CONCAT(@year, @week, ' Sunday'), '%x%v %W') AS `sunday` FROM DUAL;
Természetesen, az SQL-mondatot kézzel is összerakhatod (nem kell ez a „változós” megadás), a lényeg, hogy a következő formátumú legyen az STR_TO_DATE() függvény első paramétere: 'ÉÉÉÉHH Dayname', ahol
- ÉÉÉÉ: évszám
- HH: hét száma
- Dayname: nap angol neve (előtte egy szóköz)

Mutasd a teljes hozzászólást!

  • Csak kérdés:
    Biztos, hogy adatbázisban kellene ezt a sok év sok napját/dátumát tárolni?
    A pascal nem alkalmas a kívánt adat kikalkulására?
    Mutasd a teljes hozzászólást!
  • Szia!

    Nekem Delphiben is jó. Azért akartam az adatbázisból lekérdezni, hogy minden kliens az adatbázis szerver óráját használja, ne pedig a sajátját.
    Mutasd a teljes hozzászólást!
  • Delphiben nagyon egyszerű, a DayOfTheWeek() függvényt használd a kiválasztott év első napjának meghatározására, abból pedig rövidke matek a 21.hét hétfője.

    Szerk. meglátásom szerint ehhez semmi köze a szerver órájának.
    Mutasd a teljes hozzászólást!
  • Szia!

    Ez a dátumból meg tudja mondani, hogy a hét melyik napja. De nekem a hét számából kell kiszedni, hogy az adott  hét, napjai milyen dátumra esnek (év.hónap.nap) Szép lesz.....
    Mutasd a teljes hozzászólást!
  • Igen, erre írtam, hogy rövidke matek.
    Épp most fut egy társalgótéma itt, amelyben kifejtik, hogy a programozónak fölösleges érteni a matematikához. No ez a kérdés pedig bizonyítja, hogy nem fölösleges.
    Meg kell nézni, hogy a keresett év január 1. milyen napra esik. Azt el kell döntened, hogy az év első napja egyben az év 1. hete-e, erre két álláspont van. Ezek után már ki lehet számolni, hogy X héttel későbbi dátum hány napot jelent. És ha jól emlékszem, a tDateTime típusnál minden további nélkül lehet összeadással napokat lépni, így tehát január 1-ből egyszerű összeadással (na meg a 7-tel szorzással) megkapható az adott dátum.
    Mutasd a teljes hozzászólást!
  • De nekem a hét számából kell kiszedni, hogy az adott hét, napjai milyen dátumra esnek (év.hónap.nap) Szép lesz.....


    Delphi-ben a "dateutils" tartalmazza a szükséges függvényeket:

    function StartOfTheWeek(const AValue: TDateTime): TDateTime; {ISO 8601} function EndOfTheWeek(const AValue: TDateTime): TDateTime; {ISO 8601} function StartOfAWeek(const AYear, AWeekOfYear: Word; {ISO 8601} const ADayOfWeek: Word = 1): TDateTime; function EndOfAWeek(const AYear, AWeekOfYear: Word; {ISO 8601} const ADayOfWeek: Word = 7): TDateTime;
    Mutasd a teljes hozzászólást!
  • Sablon:Adott év első hetének első napja – Wikipédia

    ISO 8601 – Wikipédia
    "Az év (YYYY) jelölése az ISO szerinti év heteinek számozásában némileg eltér a naptári évtől, mivel az újév napjára vagy ahhoz legközelebb eső hétfőre esik az első hét első napja (lásd a példákat)."

    szerkesztés:
    találsz ott egy LUA kódot is, az alapján szerintem "összerakhatod" Delphi-ben is (értelemszerűen a neked szükséges függvényt, csak az első hét meghatározásában "segíthet")
    Mutasd a teljes hozzászólást!
  • Hali!

    Mivel említetted, hogy MySQL-ből is megfelelő, itt egy példa:
    SET @year = 2017; SET @week = 15; SELECT STR_TO_DATE(CONCAT(@year, @week, ' Monday'), '%x%v %W') AS `monday` , STR_TO_DATE(CONCAT(@year, @week, ' Tuesday'), '%x%v %W') AS `tuesday` , STR_TO_DATE(CONCAT(@year, @week, ' Wednesday'), '%x%v %W') AS `wednesday` , STR_TO_DATE(CONCAT(@year, @week, ' Thursday'), '%x%v %W') AS `thursday` , STR_TO_DATE(CONCAT(@year, @week, ' Friday'), '%x%v %W') AS `friday` , STR_TO_DATE(CONCAT(@year, @week, ' Saturday'), '%x%v %W') AS `saturday` , STR_TO_DATE(CONCAT(@year, @week, ' Sunday'), '%x%v %W') AS `sunday` FROM DUAL;
    Természetesen, az SQL-mondatot kézzel is összerakhatod (nem kell ez a „változós” megadás), a lényeg, hogy a következő formátumú legyen az STR_TO_DATE() függvény első paramétere: 'ÉÉÉÉHH Dayname', ahol
    - ÉÉÉÉ: évszám
    - HH: hét száma
    - Dayname: nap angol neve (előtte egy szóköz)

    Mutasd a teljes hozzászólást!
  • "közben" ("ugyanabban" a percben) lvxxx megválaszolta, meg netangel is, a hozzászólásomat vedd "háttér információnak": ISO 8601, melyik nap a hét első hete, ... 

    a tanulság: "mindenre" van szabvány, meg megoldás is, csak "össze kell ollózni" :)
    Mutasd a teljes hozzászólást!
  • Ez a megoldás tökéletesen működik. Pontosan így akartam. Köszönöm mindenkinek a hozzászólást. Tanultam belőlük.
    Szép Napot!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd