Autor | Zpráva | ||
---|---|---|---|
hellmc Profil |
Ahoyte, potrebujem exporovat data z databazy do xlsx, vsetko funguje ok, problem je zapis datumu, namiesto napr 1.1.2001 sa otvara v openoffice ako '1.1.2001 ... s apostofom, co berie ako string, myslim ... nebudem vypisovat cely kod, ide o to,ze z mysqli query vygeneruje xls ... mam to asi takto >
$spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $spreadsheet->getActiveSheet()->getStyle('G3')->getNumberFormat()->setFormatCode('DD.MM.YYYY H:i:s'); $datum=$hodnota_riadku; /*=DATUM z DB*/ $date = new DateTime($datum); $dateTime=$date->getTimestamp(); $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($dateTime ); $sheet->setCellValue('G3',$excelDateValue); ked napisem rucne $datum, zobrazi to ok, problem je ked tam zapisujem hodnotu z db, zobrazi to aktualny datum -1h ... uz fuckt neviem, dik za pomoc |
||
blaaablaaa Profil |
#2 · Zasláno: 15. 2. 2022, 18:39:09
hellmc:
Nejspíš bude problém s časovou zónou. Zkus k výslednému timestampu přičíst/odečíst posun časové zóny. |
||
hellmc Profil |
#3 · Zasláno: 16. 2. 2022, 14:21:38
blaaablaaa:
Dik za odpoved, ale problem nie je s casovou zonou, to by som posunul, problem je ze ked napisem rucne napr. $datum="2017-01-01 10:00:01" ... zobrazi sa v poriadku a naformatovany, ked ale dam $datum =$hodnota_riadku, co je datum z databazy zobrazi aktualny datum teda teraz je napr 2022-2-16 14:20:25 ... ako keby som napisal date("now") Dik ... pekny den |
||
anonym_ Profil * |
#4 · Zasláno: 16. 2. 2022, 14:26:31
hellmc:
„problem nie je s casovou zonou“ Podle původního příspěvku, kde ti hapruje právě jedna hodina, to tak vypadá. Že máš špatnou timezone v databázi. „ked ale dam $datum =$hodnota_riadku“ Co je v proměnné $hodnota_riadku ?
„napr 2022-2-16 14:20:25“ Toto není formát data, který by lezl z databáze. |
||
Keeehi Profil |
#5 · Zasláno: 16. 2. 2022, 14:30:21
anonym:
„Co je v proměnné $hodnota_riadku ?“
Doplním, ideálně kdybys napsal výstup z var_dump($hodnota_riadku);
|
||
hellmc Profil |
Keeehi:
var dump $hodnota_riadku mi vratil >string '2022-01-17 16:29:21' length(19) ale v openOffice zobrazi > 16.02.2022 14:02:05 |
||
blaaablaaa Profil |
#7 · Zasláno: 16. 2. 2022, 15:09:19
hellmc:
Podle dokumentace umí metoda PHPToExcel zpracovat i string nebo DateTime objekt. Co udělé tohle? $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date); $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date->format('Y-m-d H:i:s')); $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date->format('d.m.Y H:i:s')); Případně co vypíše var_dump($excelDateValue); ?
|
||
hellmc Profil |
#8 · Zasláno: 16. 2. 2022, 15:19:14
blaaablaaa:
$excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date); vrati 16.02.2022 14:15:05 $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date->format('Y-m-d H:i:s')); > Uncaught Error: Call to a member function format() on int var_dump($excelDateValue) > float 44578.687048611 .... hm |
||
Kajman Profil |
hellmc:
Jasně, protože té metodě nemáte dávat timestamp, ale objekt DateTime nebo string phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Shared-Date.html#method_PHPToExcel Edit: podle hlášky tam stále cpete číslo, takže v $date je něco jiného, než očekáváme dle kódu v [#1] |
||
Kajman Profil |
#10 · Zasláno: 16. 2. 2022, 15:28:36
Ještě poznámka. Excel má dva formáty datumů 1900 a 1904, a někdy zlobí kopírování dat z jednoho sešitu do druhého, pokud nejsou formáty sjednocené. Raději si to pak ještě vyzkoušejte, dokud se v tom vrtáte.
|
||
hellmc Profil |
Kajman:
Takze prosim ako osetrit hodnotu datum na date ... skusil som $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(date('d.m.Y H:i:s',strtotime($datum))); co mi vrati 1.1.1970 ... cize 0 asi $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date); vrati aktualny datum nie db datum |
||
Kajman Profil |
#12 · Zasláno: 16. 2. 2022, 15:59:00
Toto funguje?
$datum = '2022-01-17 16:29:21'; $date = new DateTime($datum); $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date); |
||
hellmc Profil |
#13 · Zasláno: 16. 2. 2022, 16:00:31
Kajman:
Jop ... to je ok .. takto to funguje |
||
hellmc Profil |
#14 · Zasláno: 16. 2. 2022, 17:45:41
hellmc:
Som trubka ... zabudol som v podmienke dat else ... funguje to squele ... dik moc za tvoj čas ... pozval by som ťa na pivo ... keby sa dalo ... este raz dik |
||
Časová prodleva: 2 roky
|
0