djluzak
12.03.2004, 01:13:10
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

Czy zna ktoś jakiś sposób?

Foxx
12.03.2004, 01:20:57
[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]
djluzak
12.03.2004, 01:33:51
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.
rzseattle
12.03.2004, 01:41:50
[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
12.03.2004, 01:49:08
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
12.03.2004, 01:54:52
Mogłeś sam sobie pomóc - w manualu w rodziale o datach jest funkcja calculateVacationDays()
djluzak
12.03.2004, 01:58:24
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
12.03.2004, 02:01:01
Przecież gdybym wiedział to bym Ci napisał od razu - znalazłem niechcący podczas myślenia jak to zrobić...
djluzak
12.03.2004, 02:04:51
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
12.03.2004, 02:11:23
A masz moze pomysl jak umiescic zwracane dane w tablicy zamiast wypisywac na ekranie?
djluzak
12.03.2004, 02:12:17
Albo w bazie MySQl
Foxx
12.03.2004, 02:16:04
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
12.03.2004, 02:24:40
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
12.03.2004, 02:26:26
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
12.03.2004, 02:31:58
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
12.03.2004, 02:45:17
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
12.03.2004, 02:51:30
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
12.03.2004, 02:52:47
A nie prościej:
[php:1:17651c13e7]<?php
$sql = "INSERT INTO kalendarz (dni) VALUES ('".@implode(", ",$tab)."')";
mysql_query($sql);
?>[/php:1:17651c13e7]
Foxx
12.03.2004, 02:54:26
:-k prościej
djluzak
12.03.2004, 02:58:49
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
12.03.2004, 03:20:57
tak przy okazji powiedzcie mi jeszcze jak pobrac id (auto_increment) wlasnie dodanego rekordu w tej samej funkcji??
spenalzo
12.03.2004, 03:58:31
[php:1:3897b70b5c]<?php
$id=mysql_insert_id();
?>[/php:1:3897b70b5c]
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.