2010-02-13 6 views
2

Je suis en train de mettre en forme des dates en PHP (je suis un programmeur Coldfusion, donc la syntaxe est similaire, mais je suis bloqué!).PHP date format question

Les dates sont parfaitement formatées dans l'affichage que je veux. Cependant, ils reviennent tous le 1er Janvier 1970.

Quelqu'un peut-il faire la lumière sur ce sujet? Pour l'arrière-plan, je tire une date à partir d'une colonne datetime dans mySQL. La date brute je suis en train de le format est ....

2010-04-03 00:00:00

Voici la ligne de code j'utilise ....

$xml_output .= "\t\t<eventdate>" . date("l jS F", $row['event_date']) . "</eventdate>\n"; 

Je veux que cette image s'affiche comme suit: samedi 3 avril

Toute aide serait appréciée!

Simon

Répondre

6

Le second paramètre à date() doit être un UNIX timestamp.

Convertissez votre chaîne de date dans un horodatage en utilisant d'abord strtotime():

$timestamp = strtotime($row["event_date"]); 
echo date("l jS F", $timestamp); // Saturday 3rd April 

pages Manuel:

+0

Vous avez oublié de passer '$ timestamp' comme argument à' date() ' –

+0

@fireeyedboy merci, corrigé. –

+0

parfait, merci beaucoup les gars! juste ce dont j'avais besoin :) –

0

Utilisez la fonction strftime() pour convertir le datetime que vous obtenez à partir d'une base de données dans un timestamp unix approprié pour date():

date("l jS F", strtotime($row['event_date'])) 
0

fonction PHP date devrait recevoir un horodatage unix.

Modifiez le format de la date à laquelle vous extrayez l'horodatage db vers unix.

2

La fonction date fonctionne avec un UNIX timestamp(à savoir un certain nombre de secondes depuis le 1er Janvier, 1970), et non une date passée comme une chaîne.

Cela signifie que vous devez d'abord convertir votre date à un horodatage, en utilisant strtotime, par exemple:

$timestamp = strtotime('2010-04-03 00:00:00'); 

Et puis, vous pouvez utiliser la fonction date sur cette timestamp:

echo date('l jS F', $timestamp); 

Qui vous obtient la sortie que vous vouliez:

Saturday 3rd April 
1

Alternati Vely, vous pouvez laisser MySQL format the date pour vous sur la récupération (fait pour un code plus propre dans la construction de votre XML):

SELECT 
    event_date, 
    DATE_FORMAT(event_date, '%W %D %M') AS event_date_formatted 
FROM 
    ... 

Puis en PHP:

$xml_output .= "\t\t<eventdate>" . $row['event_date_formatted'] . "</eventdate>\n"; 

également:
fonctions de formatage de date MySQL sont un peu plus flexible, car ils ne dépendent pas tellement des horodatages unix (si vous utilisez les champs DATETIME, c'est-à-dire). Certes un peu improbable peut-être; mais si votre event_date dépasse les limites d'horodatage entières non signées de 32 bits, vous êtes à peu près vissé avec la fonction date de php. Essayez de mettre en forme une date avant le 1er janvier 1970, ou après le 19 janvier 2038, et vous verrez ce que je veux dire.

+0

génial, ce sera probablement beaucoup plus rapide pour le retour du résultat. Je vais essayer! le correctif ci-dessus pour les horodatages unix a résolu le problème de toute façon. Mais je préfère avoir les dates les plus sexy directement de mySQL :) –