2009-09-13 8 views
0

Ce que je veux faire est de faire un script sur le serveur lire un fichier texte, le trier, puis le sortir dans un objet javascript (probablement via JSON). Le fichier texte en question ressemble à ceci:Comment devrais-je stocker une date en PHP pour une utilisation avec javascript?

 
13/09/2009,17/09/2009,Arbitrary dates 
14/09/2009,18/09/2009,Some random comment 
14/09/2010,18/12/2010,A comment to the dates 
14/09/2010,18/09/2010,A subset of another date 
14/09/2001,18/09/2002,The oldest date 

Le php pour gérer la filereading ressemble à ceci:

function loadDates() 
{ 
    $dateFile = fopen("dates.txt", "rt"); 
    $dates = array(); 
    if($dateFile) 
    { 
     flock($dateFile,LOCK_SH); 
     $i = 0; 

     while(!feof($dateFile)) 
     { 
      $text = fgets($dateFile); 
      if($text !== FALSE) 
      { 
       $i++; 
       $arr = explode(",",$text,3); 
       //actual storage 
       $dates[$i]['start'] = strtotime($arr[0]); 
       $dates[$i]['end']  = strtotime($arr[1]); 
       $dates[$i]['comment'] = $arr[2]; 
      } 
     } 
     fclose($dateFile); 

     //sort by start date, then by end date 
     foreach($dates as $key => $item) 
     { 
      $start[$key] = $item['start']; 
      $end[$key] = $item['end']; 
     } 
     array_multisort($start, SORT_ASC, $end, SORT_ASC, $dates); 
     return $dates; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

Cependant, qui stocke unix timesstamps dans les dates de début et de fin. J'utiliserais la classe DateTime, mais je suis actuellement limité à PHP 4.4. Idéalement, je voudrais enregistrer les dates dans un format:

  1. Peut-on comparer numériquement
  2. sont lisibles humain (permettant l'édition humaine de dates.txt)
  3. correctement formatés (c.-à « 01-01 -1900" est converti en « 01/01/1900 »)
  4. peut être converti en un javascript objet date

Comment pourrais-je aller sur le stockage des dates afin qu'ils satify ces restrictions?

Répondre

2

Le plus sûr est d'utiliser timestamps UNIX

en javascript, vous pouvez utiliser

var mydate = new Date(); 
mydate.getTime(); //timestamp 
mydate.setTime(your_timestamp); //set using timestamp 

en php la fonction date prend l'horodatage en tant que second paramètre.

voir http://jp.php.net/manual/en/function.date.php et https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date

EDIT:
Voir aussi strftime http://jp.php.net/manual/en/function.strftime.php

EDIT:
Note: la fonction javascript prend millisecondes, et les fonctions php utiliser secondes. diviser la sortie du javascript par 1000 ou utiliser quelque chose comme ce qui suit:

Date.prototype.getTimeInSeconds = function() { 
    return this.getTime()/1000; 
} 

var mydate = new Date(); 
mydate.getTimeInSeconds(); //PHP-compatible timestamp 
+0

Vous avez oublié de multiplier/diviser par 1000. –

+0

vous » re droit. fixé. –

0

magasin aux dates ainsi:

19991231 = 31 décembre 1999

20000704 = 4 Juillet, 2000

Lecture lisible, définitivement triable, et vous pouvez créer une fonction JavaScript pour la conversion.

Je vais vous donner un hack de mon esprit dérangé:

(cela suppose que x est cette date sous forme aaaammjj)

new Date((x-(x%10000))%9999,(((x%10000)-(x%100))%99)-1,x%100)