ugrás a tartalomhoz

Javascript visszaszámláló hiba

Zsolesz74 · 2016. Feb. 9. (K), 20.27
Sziasztok!

Az egyik oldalamon van egy javascript, ami egy adott napig visszaszámol. Rendesen megy mindenen kivétel a Safari. Itt NaN -t ír ki. És hogy még bonyolultabb legyen a dolog, Erdélyből megtekintve az oldalt, minden! böngésző alatt NaN a válasz.
Hol lehet a hiba? Van valami ötlet, mi alapján keresgéljek? Valami a szerveridő eltolódással lehet kapcsolatban?

Köszi!
Zsolt
 
1

Mivel nem tudjuk mit csinál a

Poetro · 2016. Feb. 9. (K), 21.46
Mivel nem tudjuk mit csinál a kódod nehéz válaszolni. A NaN azt jelenti hogy Not a Number, azaz nem szám. Valahol a számolásod közben nem szám adatot vagy adattal szorzol, osztasz, kivonsz illetve összadsz, aminek az eredménye nem szám lesz.
2

Értem!

Zsolesz74 · 2016. Feb. 9. (K), 22.31
A script oké, nem ma kezdtem. Az a gondom, hogy más országból miért nem működik, erre keresem a magyarázatot. Magyarországi IP-ről, otthonról tesztelve, vagy akárhonnan az országból megy, de ha már átmegyek Erdélybe, ott nem megy, holott ugyanaz a gép, csak az IP más, mint az előző, ahonnan nézem.
3

Ha a script oké lenne, nem

Hidvégi Gábor · 2016. Feb. 9. (K), 22.48
Ha a script oké lenne, nem írtál volna ide. Hogy egy ilyen bonyolultságú kódban mit számít az IP, nem tudom:

document.getElementById('visszaszamlalo').innerHTML = Math.floor((jovobeliidopont - new Date()) / 86400);
4

Mégiscsak segítettél.

Zsolesz74 · 2016. Feb. 9. (K), 22.56
Tényleg itt van a probléma, vagyis máshol, de itt akad ki.
Az adatot én "Y m d H:i:s" formában kapom Magyarországról, és ebből vonom ki a más formátumú dátumot.

var now = new Date();
var lejarat = new Date("<?php echo $lejarat; ?>"); //Y m d H:i:s
var seconds = (lejarat - now) / 1000;


Tudom, strtotime ...az segít.
5

Ez még mindig zavaros. Azt

Joó Ádám · 2016. Feb. 10. (Sze), 01.16
Ez még mindig zavaros. Azt mondod, hogy ugyanazzal a géppel, ugyanazzal a böngészővel viselkedik másképp? A PHP az IP-d alapján rendel a kéréshez más locale-t, és szolgál ki más formátumú dátumot?
7

Értem én, hogy nem ma

bamegakapa · 2016. Feb. 10. (Sze), 10.32
Értem én, hogy nem ma kezdted, de ha nem a szkriptben a hiba, akkor mégis hol? Bemásolod a kódot, az ember ránéz, és látja, hol lehet hibaforrás. Százféle módon meg lehet írni egy ilyen szkriptet. Ha kérdezel, szerintem a kód a minimum.

A dokumentáció szerint a Date konstruktora (ami a Date.parse()-t hívja) RFC 2822 szabványú sztringeket képes értelmezni, IE9 óta ISO 8601-et is. Minden más implementáció kérdése, tehát vagy működik, vagy nem (= ne függj tőle).

Egyik megoldás, hogy PHP-ból a megfelelő formátumban küldöd át a dátumot, van rá előre definiált formátum konstans. Vagy használsz UNIX timestampet.

A másik megoldás, hogy kliens oldalon behúzol egy Moment.js-t vagy más library-t, ami képes dátum sztringek értelmezésére.

Általános tanács: ha dátumokkal dolgozol, mindig használj valami előre megírt, általános jellegű megoldást. Egyszerű dolognak tűnik, de ahogy belemélyedsz...
6

Anno írtam egy scriptet az

Karvaly84 · 2016. Feb. 10. (Sze), 01.18
Anno írtam egy scriptet az eltelt idő kijelzésére. Akkor olvastam a PHP fórumon, hogy a Safari bizonyos esetekben hibásan kezeli a dátumot és ez miatt nem tudsz. Azért kapsz "nem számot", mert a kapott értéket nem tudja dátumként kezelni. Amikor műveleteket hajtasz végre dátumokkal a javascript értelmező számmá konvertálja "date.valueOf()" milliszekundumban.

Ezt úgy tudod megoldani, hogy vagy szerver oldalon milliszekundumra konvertálod a dátumot vagy olyan formában iratod ki amit a safari is jól kezel. A legpraktikusabb a ISO formátum.

PHP ben valahaogy így fest:

// Dátum objektum az aktuális idővel
$server_t = new DateTime();

// Dátum szöveges formátumban
$server_iso_t = $server_t->format('Y-m-d\TH:i:sP');
Ui.: Az hogy Erdélyben máshogy működik a kód az meg a területi beállítások miatt lehetséges.