PDA

Volledige versie bekijken : mysql - php - flex datums


GreenGoblin
%Europe/Berlin %911 %2007, 22:52
Hi,

Ik wil datums vanuit mijn database (mysql - date) naar mijn flex app krijgen, maar blijkbaar gaat dit zo maar niet wan het geen dat ik terug krijg via amfphp is null. En ik krijg ze maar niet goed :@ :) . Ik kan ze niet omzetten naar strings in mijn php code want ik moet er nog dag berekeningen op doen in mijn flex code. Iemand ervaring met het correct omzetten van mysql date naar flex date ?

Greeets !

Thomaz
%Europe/Berlin %505 %2007, 13:07
Zelf vind ik werken met UnixTimestamps erg makkelijk. Dat is gewoon een int waar je vrij simpel berekeningen mee uit kan voeren.

GreenGoblin
%Europe/Berlin %622 %2007, 15:56
Ja heb ook al mee gebrobeerd, maar timestamp bestaat niet is flex. Naar wat cast je dat dan in php ? Als ik timestamps cast naar date in php, krijg ik nog altijd null binnen in flex.

BernardV
%Europe/Berlin %712 %2007, 18:05
Ja heb ook al mee gebrobeerd, maar timestamp bestaat niet is flex. Naar wat cast je dat dan in php ? Als ik timestamps cast naar date in php, krijg ik nog altijd null binnen in flex.

Date in Flash is in miliseconden dus een unix timestamp * 1000 is hetzelfde als een date in flash/flex.
timestamps casten naar date kan niet zo 123 in php, kijk eens naar de date functies op http://www.php.net (mktime etc).

Je kunt vanuit je database waarschijnlijk ook direct als timestamp opvragen, dan hoef je niets te casten in php, maar gewoon de int doorsturen.

Thomaz
%Europe/Berlin %415 %2007, 10:58
Ja heb ook al mee gebrobeerd, maar timestamp bestaat niet is flex. Naar wat cast je dat dan in php ? Als ik timestamps cast naar date in php, krijg ik nog altijd null binnen in flex.

Voor de duidelijkheid: een timestamp is een afspraak over een tijdsnotatie. Er zijn verschillende afspraken, dus verschillende timestamps. De UnixTimestamp wordt genoteerd in het aantal sec. na 1-1-1970. Een integer dus. Het lijkt me niet zo moeilijk om vanuit PHP een int naar Flex te sturen.

In Flex gebruik je hiervoor de de functie "setTime" in het "Date" object. Maar let op, Flex gebruikt miliseconden als timestamp, zoals BernardV ook al zegt.

De UnixTimestamp is bij mij nu ongeveer 1184662497.
In Flex:

var tijd: Date = new Date();
tijd.setTime(1184662497 * 1000);
trace(tijd); // iets als: 17-7-2007, 10:54:57

iamdesign
%Europe/Berlin %520 %2007, 13:29
hoy green goblin dit is een werkende methode die ik net getest heb
het is wel niet de cleanste php code, maar ja...ff in 5min gemaakt ;)

De PHP File

<?php

include_once(AMFPHP_BASE . "shared/util/MethodTable.php");

class DateClass
{
/**
* Constructor
* @ Constructor
*/
function DateClass()
{

$link = mysql_connect("localhost", "foobie", "test")
or die("Kan niet verbinden: " . mysql_error());

mysql_select_db("test")
or die("Kan geen database selecteren");

}

/**
* Get dates van users
* @geeft een date terug
*/
public function explodeDates($arg){
$temp = explode("-", $arg);

$dag = $temp[2];
$maand = $temp[1];
$jaar = $temp[0];

$tempStamp = mktime(0,0,0, $maand, $dag, $jaar);

return $tempStamp;
}

public function getDates()
{
$query = "SELECT date FROM users WHERE id=1";
$result = mysql_query($query);

$date = mysql_result($result, 0);

$date = $this->explodeDates($date);

return $date;
}


Dit is dan de code voor in je flex file
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:RemoteObject id="controllerDatum" fault="faultHandler(event)" showBusyCursor="true" source="test.DateClass" destination="amfphp">
<mx:method name="getDates" result="resultHandler(event)" />
</mx:RemoteObject>

<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;



private function init():void
{
controllerDatum.getDates.send();
}

private function resultHandler(e:ResultEvent):void
{
trace(e.result);
var d:Date = new Date();
d.setTime((e.result as int) * 1000);
trace("DATUM IS = "+d);
}

private function faultHandler(e:FaultEvent):void
{
trace("FAULT = " + e.fault.faultString)
}
]]>
</mx:Script>
</mx:Application>

GreenGoblin
%Europe/Berlin %620 %2007, 15:53
Jep werkt idd maar aangezien ik met amfphp werk kan ik die functie in flex niet uitvoeren, de datum moet echt correct vanuit php komen. Is dit dan echt niet mogelijk ? Kan toch niet ?

Greets !

Thomaz
%Europe/Berlin %673 %2007, 17:10
Je zou misschien een hack kunnen gebruiken die ik ook ooit eens voor een ArrayCollection heb gebruikt:

class Date
{
var $time;
var $date;
// enz.
var $_explicitType;

function Date()
{
$this->time = time() * 1000;
$this->_explicitType = "flex.Date"; // weet ik niet uit m'n hoofd, maar hier de juiste package
}
}

// return:
$date = new Date();
return $date;


Flex herkent het object dan aan de hand van het juiste package-pad in de explicitType. Wanneer de var's dan overeenkomen met het Date Object in Flex, wordt dit automatisch geconverteerd.