Nasıl javascript ile kullanım için PHP bir tarihini saklamak gerekir?

2 Cevap php

Ne yapmak istiyorum (muhtemelen JSON yoluyla) bir javascript nesne bu sıralamayı, sonra çıktı, bir metin dosyasını okuyun sunucuda bir komut dosyası olun. Söz konusu metin dosyası gibi bir şey görünüyor:

13/09/2009,17/09/2009,Arbitrary dates
14/09/2009,18/09/2009,Some rveom 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

Filereading işlemek için php bu gibi görünüyor:

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;
    }
}

Ancak, başlangıç ​​ve bitiş tarihleri ​​unix timesstamps saklar. Ben DateTime sınıfını kullanmak istiyorsunuz, ama ben şu vea PHP 4.4 ile sınırlı değilim. İdeal olarak, bir biçimde tarihlerini saklamak istiyorum:

  1. Sayısal olarak karşılaştırılır edilebilir
  2. Insan okunabilir (insan düzenleme izin dates.txt) Are
  3. Sürekli (yani "1900/01/01" için "01/01/1900" dönüştürülür) biçimlendirilir
  4. Bir javascript Date nesnesi dönüştürülebilir

Onlar bu kısıtlamalar satify yüzden nasıl tarihlerini depolamak hakkında gitmek istiyorsunuz?

2 Cevap

Güvenli UNIX zaman kullanmaktır

javascript, kullanabilirsiniz

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

php tarih fonksiyonu ikinci parametre olarak zaman damgası alır.

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

EDIT:
Also see strftime http://jp.php.net/manual/en/function.strftime.php

EDIT:
Note: the javascript function takes milliseconds, and the php functions use seconds. divide the output of the javascript by 1000 or use something like the following:

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

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

Böylece tarihleri ​​Mağaza:

= 31 Aralık 1999 19991231

= 4 Temmuz 2000 20000704

Insan okunabilir, kesinlikle Sıralanabilir ve dönüşüm için bir JavaScript işlevi yapabilirsiniz.

Ben dengesiz zihin bir hack sağlayacaktır:

(Bu x yyyyaagg formda olduğu tarih olduğunu varsayar)

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