Oprettet tir. d. 10. august 2010 kl. 22:31:13

apromis
apromis (6.820 point. Point ude: 1.000)

Er da ved at gå amok ! - Mktime giver forkert resultat

Hej allesammen.

Er ved at gå fuldstændig amok. Mktime regner ikke rigtigt :(.

Se denne her :
echo "dag " .$_POST["dag"] ." maned" .$_POST["maaned"] ." aar" .$_POST["aar"] ."SPLIT";
echo "dato" .$tid;

Giver :
dag 10 maned8 aar2010SPLITdato1281484740Next : 1281484740nexxxx

LAver så denne kode :
$tal = mktime (23,59,00,$maaned,$dag,$aar);
Som giver resultat :
1281484740 som faktisk svarer til den 11-Aug-2010 kl 1:59:00

Det vil sige den 10 august 2010.
Hvis jeg laver en mktime på 23:59:00 10 august 2010 får jeg denne værdi (er prøvet omregnet som giver korrekt værdi) :
1281477540

Hvorfor regner min kode 2 timer forkert ?
På forhånd tak

Skrevet tir. d. 10. august 2010 kl. 22:36:37| #1

arne_v
arne_v (1.005.623 point)
Proev og saet din tidszone til Danmark. Det ligner et DK versus GMT problem.

Skrevet tir. d. 10. august 2010 kl. 22:37:13| #2

splazz
splazz (55.958 point)
majbom.com
måske noget med at tidszonen på serveren ikke er den samme som du sidder i?

Skrevet tir. d. 10. august 2010 kl. 22:37:31| #3

splazz
splazz (55.958 point)
majbom.com
nej jeg er langsom i dag :)

Skrevet tir. d. 10. august 2010 kl. 22:40:13| #4

apromis
apromis (6.820 point)
Du har ganske ret. HAr oploadet til serveren og det virker her.
Så mit problem ligger faktisk i javascriptet ikke kører i samme zone :(.

Hvad kan man gøre ved det ?

Skrevet tir. d. 10. august 2010 kl. 22:41:27| #5

apromis
apromis (6.820 point)
function mktime() {
    // http://kevin.vanzonneveld.net
    // +  original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +  improved by: baris ozdil
    // +      input by: gabriel paderni
    // +  improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +  improved by: FGFEmperor
    // +      input by: Yannoo
    // +  bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: jakes
    // +  bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +  bugfixed by: Marc Palau
    // +  improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: 3D-GRAF
    // +  bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Chris
    // +    revised by: Theriault
    // %        note 1: The return values of the following examples are
    // %        note 1: received only if your system's timezone is UTC.
    // *    example 1: mktime(14, 10, 2, 2, 1, 2008);
    // *    returns 1: 1201875002
    // *    example 2: mktime(0, 0, 0, 0, 1, 2008);
    // *    returns 2: 1196467200
    // *    example 3: make = mktime();
    // *    example 3: td = new Date();
    // *    example 3: real = Math.floor(td.getTime() / 1000);
    // *    example 3: diff = (real - make);
    // *    results 3: diff < 5
    // *    example 4: mktime(0, 0, 0, 13, 1, 1997)
    // *    returns 4: 883612800
    // *    example 5: mktime(0, 0, 0, 1, 1, 1998)
    // *    returns 5: 883612800
    // *    example 6: mktime(0, 0, 0, 1, 1, 98)
    // *    returns 6: 883612800
    // *    example 7: mktime(23, 59, 59, 13, 0, 2010)
    // *    returns 7: 1293839999
    // *    example 8: mktime(0, 0, -1, 1, 1, 1970)
    // *    returns 8: -1
    var d = new Date(), r = arguments, i = 0,
        e = ['Hours', 'Minutes', 'Seconds', 'Month', 'Date', 'FullYear'];

    for (i = 0; i < e.length; i++) {
        if (typeof r[i] === 'undefined') {
            r[i] = d['get' + e[i]]();
            r[i] += (i === 3); // +1 to fix JS months.
        } else {
            r[i] = parseInt(r[i], 10);
            if (isNaN(r[i])) {
                return false;
            }
        }
    }
   
    // Map years 0-69 to 2000-2069 and years 70-100 to 1970-2000.
    r[5] += (r[5] >= 0 ? (r[5] <= 69 ? 2e3 : (r[5] <= 100 ? 1900 : 0)) : 0);
   
    // Set year, month (-1 to fix JS months), and date.
    // !This must come before the call to setHours!
    d.setFullYear(r[5], r[3] - 1, r[4]);
   
    // Set hours, minutes, and seconds.
    d.setHours(r[0], r[1], r[2]);

    // Divide milliseconds by 1000 to return seconds and drop decimal.
    // Add 1 second if negative or it'll be off from PHP by 1 second.
    return (d.getTime() / 1e3 >> 0) - (d.getTime() < 0);
}

Skrevet tir. d. 10. august 2010 kl. 22:51:54| #6

Du bruger noget dato-helløj sat af javascript i brugerens browser?? Du kan jo aldrig hvilken tidszone bruger anvender, men du kan få det at vide. Se fx

  alert(new Date());

Deraf kan du udtrække tidszonen. (Og hvis det er meget vigtigt, så husk at brugeren kan snyde dig)

Skrevet tir. d. 10. august 2010 kl. 22:58:24| #7

apromis
apromis (6.820 point)
Altså der bliver kørt et tjek i php efterfølgende så det ikke super vigtigt.
Men vil gerne have denne service til mine brugere.
Hvordan vil du gøre det ?
    var d = new Date(), r = arguments, i = 0,

replacere newdate og fjerner 60*60*2 ?

Skrevet tir. d. 10. august 2010 kl. 23:01:25| #8

Hvad skal du bruge det til? Og hvorfor aflæse dato på brugerens maskine med javascript?

Skrevet tir. d. 10. august 2010 kl. 23:03:38| #9

apromis
apromis (6.820 point)
Altså hvis den kan læse serveren istedet ville det være endnu bedre :) ?

Skrevet tir. d. 10. august 2010 kl. 23:06:48| #10

Det kommer sådan set an på hvad du skal bruge det til.

Skrevet tir. d. 10. august 2010 kl. 23:09:49| #11

apromis
apromis (6.820 point)
Min kode udregner sekunder efter 1970 udfra nogle selectbokse på tidspunktet 23,59,00 på denne dag.

var m1 = document.data.dag.options[document.data.dag.selectedIndex].value;
var m2 = document.data.maaned.options[document.data.maaned.selectedIndex].value;
var m3 = document.data.aar.options[document.data.aar.selectedIndex].value;
var tidSubmittedDate = mktime(23, 59, 00, m2, m1, m3);
if (oHash[tidSubmittedDate]) {
var textstring = "Der er allerede udfyldt data for denne dato. Brug menuen for komme tilbage, og dermed rette indtastningen for denne dato.";
alert (textstring); 
  }

jeg bruger ovenstående postet kode til at udregne det med i javascript :)

Skrevet tir. d. 10. august 2010 kl. 23:10:37| #12

apromis
apromis (6.820 point)
Hov og hashen er udskrevet fra php med f.eks dette output :
var oHash = {"1280966340":1,"1281311940":1,"1281484740":1};

Skrevet tir. d. 10. august 2010 kl. 23:16:05| #13

Nu kan du aldrig regne med at en brugers tidsangivelse på hans maskine passer. Så find alle data på serveren, også dags dato. Og så kan du bare gøre det med datoen, ikke et timestamp.

Skrevet tir. d. 10. august 2010 kl. 23:18:26| #14

apromis
apromis (6.820 point)
Jamen hvordan vil du gøre det ?
Kender ikke ret meget til javascript :(

Er det her den tager fra brugerens maskine :
    var d = new Date(), r = arguments, i = 0,
        e = ['Hours', 'Minutes', 'Seconds', 'Month', 'Date', 'FullYear'];

Eller loader den fra sendte ?

Skrevet ons. d. 11. august 2010 kl. 07:43:48| #15

splazz
splazz (55.958 point)
majbom.com
javascript henter dato fra klienten og php henter dato fra serveren - færdig slut!

Skrevet ons. d. 11. august 2010 kl. 07:45:55| #16

apromis
apromis (6.820 point)
Pis :).

Arne pointsne må være dine.

Skrevet tor. d. 12. august 2010 kl. 03:53:23| #17


Skrevet tor. d. 12. august 2010 kl. 03:54:11| #18

arne_v
arne_v (1.005.623 point)
Hvis du vil bruge serverens tid i JavaScript client side, så outputter du noget JavaScript som sætter tiden til serverens tid (konstant i JavaScript, variabel i PHP).

Skrevet søn. d. 26. september 2010 kl. 21:07:26| #19

arne_v
arne_v (1.005.623 point)
så mangler du bare at acceptere svaret

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Ville ikke tildele at upload det til database eller komme...

Oprettet den 10. februar 2012 kl. 21.23
tobrukDk giver 15 point for svar | Giv et svar »

HTTP Post XML og modtag svar

Oprettet den 10. februar 2012 kl. 17.55
mrkaynex giver 200 point for svar | Giv et svar »

Inspion Economy søger en dygtig programmør, som kan...

Oprettet den 10. februar 2012 kl. 16.09
Kathja giver 15 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger