Javascript v IE a EDGE – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Javascript v IE a EDGE – PHP – Fórum – Programujte.comJavascript v IE a EDGE – PHP – Fórum – Programujte.com

 

Gogo
~ Anonymní uživatel
7 příspěvků
16. 8. 2017   #1
-
0
-

Přeji pěkný den potřebuji poradit s kouskem kódu v Javascriptu 

function prepocti()
{ var formu = document.getElementById('hodiny'); 
  var oddata = document.getElementById('od').value;
  var dodata = document.getElementById('do').value;
  var hodin = intlDate.format( new Date( (toTimestamp(new Date(toDate(dodata,"h:m:s"))) -3600000) - toTimestamp(new Date(toDate(oddata,"h:m:s")))));
  var rozdel = hodin.split(":");
  var vysledek = rozdel[0]+ (rozdel[1]/60);
  formu.value = vysledek;
}


Ve většině prohlížečů to funguje jak má tedy z formuláře načte hodnotu spočítá rozdíl a vráti do formuláře počet hodin od-do a převede minuty na zlomky hodin, (30 minut na 0,5 hodiny a podobně) nicméně v IE a EDGE píše tvrdohlavě NaN u výsledku. Nedokážu přijít na to proč. Myslel jsem že problém je že má hodiny a minuty ve stringu zkoušel jsem Number() i parseInt() i násobit 1 ale bez jakéhokoliv efektu.

Děkuji za každou radu

Nahlásit jako SPAM
IP: 78.108.150.–
peter
~ Anonymní uživatel
4014 příspěvků
16. 8. 2017   #2
-
0
-

dej si pod kazdy radek alert(promenna), napr alert(hodin) a uvidis, kde to pise nan. Nejspis nejaky string neprevedes na cislo.
<input value="123">
x = id1.value = '123'
y = id2.value = '456'
z = x + y = '123456' nikoliv 579

Nahlásit jako SPAM
IP: 2001:718:2601:258:8c89:68...–
Gogo
~ Anonymní uživatel
7 příspěvků
16. 8. 2017   #3
-
0
-

#2 peter
Děkuji za rychlou reakci nicméně jak jsem psal již při zakládání vlákna pokoušel jsem se různými způsoby udělat ze stringu number ovšem beyúspěšně :( 

Promenna oddata : 8:00  index.php:290:3
Promenna dodata : 16:00  index.php:292:3
Promenna hodin : 8:00  index.php:294:3
Rozdelene hodiny : 8 minuty: 00  index.php:296:3
Vypocet : hodiny 8 minuty 0  index.php:298:4
Vysledek : 8
To stejné v EDGE a IE
Promenna oddata : 8:00
Promenna dodata : 16:30
Promenna hodin : ‎8‎:‎30
Rozdelene hodiny : ‎8‎ minuty: ‎30
Vypocet : hodiny NaN minuty NaN
Vysledek : NaN


a za boha nemůžu přijít na to jak to překonvertit na číslo aby s tim ten debilní prohlížeč nepracoval jako se stringem :(

Nahlásit jako SPAM
IP: 78.108.150.–
gna
~ Anonymní uživatel
1891 příspěvků
16. 8. 2017   #4
-
0
-

Pokud jsou to stringy, tak by to mělo fungovat. (špatně) 

var rozdel = "8:30".split(":");
var vysledek = rozdel[0] + (rozdel[1]/60);
// "8" + ("30"/60) => "8" + 0.5 => "80.5"

Nenapadá mě, jak by to zobrazovalo všechny hodnoty správně a padlo to až na tom výpočtu, ale problém bych hledal v té šílenosti s datem před tím.

Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
16. 8. 2017   #5
-
0
-

#4 gna
Nevím, jestli to povede k řešení, ale bývá dobrým zvykem v takových případech nedělit 60, ale 60.0

Osobně bych ten časový údaj nejprve celý převedl na minuty nebo sekundy. Výpočty v těvh minutách nebo sekundách. Teprve při prezentaci bych ho převedl na desetinné hodiny, resp. na hodiny a minuty.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:748a:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
17. 8. 2017   #6
-
0
-

Zkousel jsi pouzit google? Google = javascript prevod retezec na cislo [Vyhledat]
s = '060';
a = parseFloat(s);
b = parseInt(s);
c = s * 1;
alert([a,b,c]);

Nahlásit jako SPAM
IP: 2001:718:2601:258:85d0:ab...–
Gogo
~ Anonymní uživatel
7 příspěvků
17. 8. 2017   #7
-
0
-

#6 peter
Přeji pěkné ráno. Ano Google používat umím ale to co mi píšete jsem samozřejmě zkoušel.

rozdel[2]= rozdel[0]*1;
rozdel[3]= rozdel[1]*1;

rozdel[4]= parseFloat(rozdel[0]);
rozdel[5]= parseFloat(rozdel[1]);

rozdel[6]= parseInt(rozdel[0]);
rozdel[7]= parseInt(rozdel[1]);

Výsledek pole jinde než IE a Edge (Firefox,Chrome ....)
Array [ "8", "30", 8, 30, 8, 30, 8, 30 ]

Výsledek pole v IE a Edge
Array [ "8", "30", NaN, NaN, NaN, NaN, NaN, NaN ]


a jako bonus kdyz si do kodu vložím tu proměnnou s tak to funguje samozřejmě správně :(

Nahlásit jako SPAM
IP: 78.108.150.–
Gogo
~ Anonymní uživatel
7 příspěvků
17. 8. 2017   #8
-
0
-

#7 Gogo
Z toho vyplýva že problém je zjevně ve výstupu z funkce intlDate. Není to ani číslo ani string podle mně :( a už mi došli nápady jak to pořešit :(
 

Nahlásit jako SPAM
IP: 78.108.150.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 8. 2017   #9
-
0
-

   

>> a = new Intl.DateTimeFormat().format(new Date());
"8/17/2017"
>> a.replace(/(.)/g, "$1,");
",8,,/,,1,7,,/,,2,0,1,7,"
>> a.replace(/./g, val => val.charCodeAt(0) + ",");
"8206,56,8206,47,8206,49,55,8206,47,8206,50,48,49,55,"
Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
4014 příspěvků
17. 8. 2017   #10
-
0
-

Mne osobne by treba zajimalo, co vyhodi v IE, FF a pod funkce
alert(hodin);
Pripadne, jak to vypada po splitovani. Nejspis tam jsou nejaka cisla, ktera tam nemaji byt. intlDate funkce mi nic nerika, takze neumim odhadnou, co v te promenne mas a pak si to nemuzu nasimulovat u sebe.

 

Nahlásit jako SPAM
IP: 2001:718:2601:258:85d0:ab...–
Gogo
~ Anonymní uživatel
7 příspěvků
18. 8. 2017   #11
-
0
-

#10 peter
Přeji opět pěkný den vypisy všech proměnných jsem už sem daval. Nicméně jsem to už vyřešil jinak vyprdnul jsem se na funkci intlDate a použil jednoduchou matematiku

  var oddata = document.getElementById('od').value;
  var dodata = document.getElementById('do').value;
  var od_d = oddata.toString().split(":");
  var do_d = dodata.toString().split(":");
  var pocitejhodinyod = (od_d[0]*60) + (od_d[1]*1); 
  var pocitejhodinydo = (do_d[0]*60) + (do_d[1]*1);
  var vysledek =(pocitejhodinydo*1 - pocitejhodinyod*1)/60;


A funguje to ve všech prohlížečích.

Děkuji všem za zájem pomoci a všechny odpovědi. :)

Nahlásit jako SPAM
IP: 78.108.150.–
peter
~ Anonymní uživatel
4014 příspěvků
18. 8. 2017   #12
-
0
-

#11 Gogo
Aha, promin, jj, je to ve #3 Gogo. Nejsem zvykly si pri ladeni vypisovat tolik textu, tak jsem to automaticky povazoval za nejaky obecny textovy vypis tveho programu a ignoroval jako nedulezite :)

Dal jen takova uvaha jeste o puvodnim problemu
V tom pripadku to vypada na problem nekde s tim rozdel 

Rozdelene hodiny : ‎8‎ minuty: ‎30
Vypocet : hodiny NaN minuty NaN
Vysledek : NaN

Ale rozdelene hodiny se jevi ok. Tezko rici, nemame ten kod, ktery to vypisoval z ceho.
Uz jsem se setkal s tim, ze funkce nevracela cislo ani string, ale nejaky vlastni format, ktery si alert nebo innerHTML umel prevest. Takze mozna pred splitovanim to bylo treba prevest na string, treba prictenim prazdneho stringu.
'' + funkce(...) // funkce = intlDate.format...
 

Zvlast v excelu mne toto vytaci :) Prvni, co vypinam, jsou automaticke opravy datumu a nejake jeho formatovani. Autor tam da anglicky datum a excel mi tam da carky a preformatuje to podle nastaveni v systemu. A v systemu v hodinach pridavam i den v tydnu, aby byl v liste. A on si to pitomec prebira z nastaveni hodin :)
win10 - prave tlacitko na hodinach 'Upravit datum a cas' - Dalsi moznosti pro datum, cas ... - =>
Ovládací panely\Hodiny, jazyk a země či oblast
- Nastavit datum a cas - Zmenit datum a cas - Zmenit nastaveni kalendare - kratky frmat data = "ddd d.M.rrrr"
Skoro na jedno kliknuti, ze? :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:55aa:33...–
gna
~ Anonymní uživatel
1891 příspěvků
18. 8. 2017   #13
-
0
-

#12 peter
Už jsem myslel, že dementní nesouvisející příhoda nebude :)

Z těch výpisů je jasné, že to je string nebo něco, co vrací string jako svoji hodnotu. Nic tam není vidět, ale konverze neprojde, tak by tam mohly být neviditelné znaky. Jako třeba to LRM, kdyby ta funkce intlDate.format čistě náhodou byla něco jako Intl.DateTimeFormat.format, která ho tam jen v IE mívá...

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý