Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem!! Jak wypisać kolejne dni ??? Pomocy
Forum PHP.pl > Forum > PHP
djluzak
Problem wygląda następujaco:
Mamy dwie daty, np. 29-03-2004 i 2-04-2004
Jak przedstawic daty w postaci ciagu typu: 29.03, 30.03 , 31.03, 1.04, 2.04 questionmark.gifquestionmark.gif

Czy zna ktoś jakiś sposób?questionmark.gifsmile.gif
Foxx
[php:1:93c766bfa4]<?php
$data1 = "22-02-2004";
$data2 = "44-03-2004";
$daty = array($data1, $data2);
foreach($daty as $dat){
$tab = explode("-", $dat);
echo $tab[0].".".$tab[1].", ";
}
?>[/php:1:93c766bfa4]
biggrin.gif
djluzak
Dzięki wielkie za kod, ale problem polega na tym jak to zrobić, zeby uwzglednic ilosc dni w miesiacu? Masz jakis pomysl?

Dziekuje z gory.smile.gif
rzseattle
[php:1:c5f7d7029c]<?php
$months_day = array( 1 => 30, 2=> 29, 3=> 31, 4=> 30, 5=> 31, 6=> 30); //itd

$date1 = "20-03-2004";
$date2 = "2-04-2004";

$tmp = explode( "-", $date1);
$start_day = $tmp[0];
$start_month = $tmp[1];

$tmp = explode( "-", $date2);
$stop_day = $tmp[0];
$stop_month = $tmp[1];


for($i=$start_month;$i<=$stop_month;$i++){

for($x=$start_day;$x<=$months_day[(int) $i];$x++){

if($x == $stop_day && $i == $stop_month){ break;}
print $x.".".$i."<br>";

}
$start_day = 1;
}
?>[/php:1:c5f7d7029c]

Cos takiego na szybko
djluzak
Super!!!!

Działa tak jak trzeba. Chodzilo mi nawet o to zeby ostatniego dnia nie bral pod uwage i dziala idealnie. Wielkie dzieki wszystkim za pomoc
Foxx
Mogłeś sam sobie pomóc - w manualu w rodziale o datach jest funkcja calculateVacationDays()
djluzak
Gdybym wczesniej wpadl na ten pomysl to pewnie bym zerknal do manuala, ale Ty wiedziales ze ten kod tam jest a ja nie. Mysli sie po fakcie:)
Foxx
Przecież gdybym wiedział to bym Ci napisał od razu - znalazłem niechcący podczas myślenia jak to zrobić... smile.gif
djluzak
Najwazniejsze ze juz mam ten kod bo mialem rozne pomysly ale co chwile pojawialy sie jakies problemy z ta ilosci dni w poszczegolnych miesiacach:)
djluzak
A masz moze pomysl jak umiescic zwracane dane w tablicy zamiast wypisywac na ekranie?
djluzak
Albo w bazie MySQl
Foxx
jeżeli chodzi o przykład z manuala to do tablicy:
[php:1:2ef830ee6c]<?php
$tab = calculateVacationDays();
print_r($tab);

function calculateVacationDays()
{
$date_from = '24.12.2003';
$date_to = '06.01.2004';
$date_from_parts = explode('.', $date_from);
$date_to_parts = explode('.', $date_to);

// Calculating the UNIX Timestamp for both dates
$ts_from = mktime(0, 0, 0, $date_from_parts[1], $date_from_parts[0], $date_from_parts[2]);
$ts_to = mktime(0, 0, 0, $date_to_parts[1], $date_to_parts[0], $date_to_parts[2]);

// 86400 = seconds per day
for ($x = $ts_from; $x <= $ts_to; $x += 86400)
{
$vacation_days[] = date('d.m', $x);
}

return $vacation_days;
}
?>[/php:1:2ef830ee6c]
A jezeli chodzi o mysql to zalezy w jaki sposób, do jakiej tabeli...

Byl UPDATE - mały bezsens się wkradł
djluzak
Bardzo fajny skrypcik.
Nie chce Ci juz zawracac glowy, ale jak sie dobrze znasz to mozesz mi pomoc.

Np tabela o nazwie kalendarz i komorka danych o nazwie dni. Reszte komorek pomijam. Dzieki.
djluzak
I dodanie zwroconych wartosci w postaci 29.04, 30.04, 31.04 itd

Mysle ze to jest proste ale ja nie wpadne na to:(
Foxx
no więc zakładjąc że mamy już tablicę $tab w której są daty po kolei w formacie dd.mm
zakładając że tabela to "kalendarz" i ma pola dni i miesiące:
[php:1:1143dd0c68]<?
//zakładając że jest połączenie z bazą
foreach($tab as $data){
$frag = explode(".", $data);
$sql = "INSERT INTO kalendarz (dni, miesiace) VALUES ('".$frag[0]."', '".$frag[1]."')";
mysql_query($sql);
?>[/php:1:1143dd0c68]
djluzak
Dobra wszystko oki ale nie o to mi chodzilo.
Bo tutaj wpisuje osobno do komorek, a chcialbym zeby dane z tej tablicy $tab zostaly zapisane do jednej komorki tabeli w postaci (29.03, 30.03, 31.03 itd.) Da rade??
Foxx
Czyli chcesz taki długi wpis do jednej komórki? Jasne że sie da i myślę że sam byś wpadł na to...
[php:1:642faa1ead]<?
//mamy $tab po wykonaniu funkcji z manuala...
foreach($tab as $data){
$wpis .= $data.", ";
}
echo $wpis;
?>[/php:1:642faa1ead]
No i $wpis to jest to co musisz wpisać do bazy, a więc :
[php:1:642faa1ead]<?
$sql = "INSERT INTO kalendarz (dni) VALUES ('".$wpis."')";
mysql_query($sql);
?>[/php:1:642faa1ead]

Jedyna wada to to że na końcu tego wpisu będzie przecinek...
spenalzo
A nie prościej:
[php:1:17651c13e7]<?php
$sql = "INSERT INTO kalendarz (dni) VALUES ('".@implode(", ",$tab)."')";
mysql_query($sql);
?>[/php:1:17651c13e7]
Foxx
:-k prościej
djluzak
No pieknie to wyglada. Zawsze sie przydadza dwa przyklady, wiedzy nigdy za wiele.
Nie szkodzi ze wystepuje przecinek na koncu, glownie chodzilo mi o takie dane ze bedzie maksymalnie 6, 7 pozycji.

dziekuje za pomoc:)
djluzak
tak przy okazji powiedzcie mi jeszcze jak pobrac id (auto_increment) wlasnie dodanego rekordu w tej samej funkcji??
spenalzo
[php:1:3897b70b5c]<?php
$id=mysql_insert_id();
?>[/php:1:3897b70b5c]
id4
Cytat
Czyli chcesz taki długi wpis do jednej komórki? Jasne że sie da i myślę że sam byś wpadł na to...
[php:1:818adf9c41]<?
//mamy $tab po wykonaniu funkcji z manuala...
foreach($tab as $data){
$wpis .= $data.", ";
}
echo $wpis;
?>[/php:1:818adf9c41]
No i $wpis to jest to co musisz wpisać do bazy, a więc :
[php:1:818adf9c41]<?
$sql = "INSERT INTO kalendarz (dni) VALUES ('".$wpis."')";
mysql_query($sql);
?>[/php:1:818adf9c41]

Jedyna wada to to że na końcu tego wpisu będzie przecinek...


Usunięcie przecinka na końcu:
[php:1:818adf9c41]<?
//mamy $tab po wykonaniu funkcji z manuala...
foreach($tab as $data){
$wpis.=$data.", ";
}
$wpis=substr($wpis,0,-2);
echo $wpis;
?>[/php:1:818adf9c41]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.