2017-10-06 6 views
0

Je crée un cookie en JavaScript avec this code. En fait, je changé un peu le code:Format GMT date à integer dans PHP

function setCookie (name,value,days) { 
    var expires, newValue; 
    if (days) { 
     var date = new Date(); // days = 0.0006944444; // testing with one minute 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     expires = "; expires="+date.toString(); 
     newValue = encodeURIComponent(value)+'|'+date+expires; 
    } else expires = ""; 
    document.cookie = name+"="+(newValue)+"; path=/"; 
} 

Ainsi, la fonction ci-dessus envoie encodeURIComponent(value)+'|'+date+expires en tant que valeur. En PHP que je peux faire explode('|',$_COOKIE['my-key']) avec la date formatée comme celui-ci:

$string_time = "Fri Oct 06 2017 19:34:44 GMT 0300 (Eastern European Summer Time);

Maintenant je dois convertir cette chaîne en entier à comparer contre time() format entier du PHP.

Faire ce qui suit:

$currentTime = date('YmdHis', time()); 
$expire_time = date('YmdHis', strtotime($string_time)); 

Il génère en fait ceci:

string(14) "19700101000000" // $currentTime 
string(14) "20171006162139" // $cookie_time 

Question pourquoi est-$currentTime toujours la même valeur 19700101000000?

+0

Ceci est déroutant? Il est clair que vous n'obtenez pas l'heure d'expiration du cookie défini, mais en quelque sorte à partir du script créant une date UTC. Pourquoi ne l'obtenez-vous pas comme un timestamp unix à la place. – adeneo

+0

C'est la première fois que je fais cela, peut-être que vous pouvez faire la lumière sur quelle valeur devrait être définie comme timestamp UNIX? – thednp

+0

D'où obtenez-vous '$ string_time', et comment l'avez-vous eu sur le serveur? – adeneo

Répondre

2

Il suffit d'utiliser un horodatage unix à la place, que vous n'êtes pas obtenir le temps des paramètres expries, mais de la biscuits valeur

function setCookie (name,value,days) { 
    var expires, newValue; 

    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     expires = "; expires="+date.toUTCString(); 
     newValue = date.getTime()/1000; 
    } else { 
     expires = ""; 
    } 
    document.cookie = name+"="+(newValue)+"; path=/"; 
} 

Maintenant, vous pouvez le comparer directement à l'horodatage unix PHP à partir time() et obtenir la différence en quelques secondes.

Notez que vous n'utilisez même pas la variable expires, donc cela ne fait rien quand il s'agit de combien de temps le cookie est valide.

+0

Tous les jours ne durent pas 24 heures lorsque l'heure d'été est respectée, donc '(jours * 24 * 60 * 60 * 1000)' n'est peut-être pas le bon nombre de millisecondes: [* Comment ajouter le nombre de jours à la date du jour? ] (https://stackoverflow.com/questions/3818193/how-to-add-number-of-days-to-todays-date). – RobG

+0

@RobG - un timestamp unix est le nombre de secondes, ou en javascript le nombre de millisecondes, depuis l'époque, il ne contient pas de données de fuseau horaire ou l'heure d'été, donc il n'y a rien à rendre compte. – adeneo

+0

La fonction a un paramètre * days * mais définit la valeur en millisecondes. En heure locale, un cookie réglé à 4 heures du matin peut expirer à 3 heures du matin ou 5 heures du matin (en supposant un décalage horaire d'une heure) le jour suivant, soit un multiple de 24 heures mais légèrement plus ou moins en jours. – RobG