2017-03-21 1 views
0

Je dois déclarer une fonction qui prend une chaîne format MySQL DateTime ou par défaut utiliserait le DateTime en cours + 24 heuresPHP Fonction Valeur variable par défaut à DateTime + 24h

Quelque chose comme:

function myFunction($next_date = new DateTime()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s')) { 
    echo "Next date : " . $next_date; 
} 

Je ne peux pas trouver un moyen qui fonctionne, merci.

+0

veuillez considérer ma réponse en retard comme réponse acceptée. À mon avis, l'utilisation de la méthode d'objet DateTime de Nishanth est exagérée quand mon one-liner avec une plus grande prise en charge de la version php fait le même travail avec moins de codage. Il ne s'agit pas d'arracher des points, mais d'identifier la meilleure réponse pour les futurs lecteurs de SO. (Nishanth, désolé de vous refaire ça, c'est une pure coïncidence - je ne suis pas à la traîne de vos réponses, datetime est l'un de mes tags favoris.) Autant que je sache, votre méthode est également correcte.) – mickmackusa

Répondre

1

Il est juste que vous avez une erreur de syntaxe dans votre code:

Avant d'utiliser une instance d'une classe que vous devriez assiging à une variable

Donc, avant de le faire: new DateTime()-> vous devriez faire $dateTime = new DateTime() puis $dateTime->

alors, essayez de modifier votre code à ceci:

function myFunction($next_date = null) { 
    if(!$next_date) { 
     $dateTime = new DateTime(); 
     $next_date = $dateTime->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'); 
    } 
    echo "Next date : " . $next_date; 
} 
+0

Je ne pensais pas de cette façon, j'essayais de tout mettre dans la déclaration de la fonction ... – Fredovsky

+0

@Fredovsky Np! codage heureux –

+0

Un mot d'avertissement à tous les lecteurs concernant les déclarations 'DateTime()' et timezone: http://php.net/manual/fr/datetime.construct.php#104111 – mickmackusa

1

pour toute personne qui ne peut pas ou ne veut pas utiliser la DateTime() construction en raison de leur version php ou préférences personnelles (comme ils aiment vraiment une seule ligne), vous pouvez utiliser ceci:

$next_date=date("Y-m-d H:i:s",strtotime("+1 day")); 

Personnellement, je ne » t voir le besoin de créer et de manipuler un objet pour une tâche aussi simple.

+1

'date (" Ymd H: i: s ", strtotime (" + 1 jour "));' suffirait – billynoah

+0

@billynoah Oh, oui, tout à fait raison, quand je faisais des tests, j'étais en train de coder dur à une date qui causait des problèmes avec la réponse de bunkerboy étant donné un fuseau horaire spécifique. Je mettrai à jour ma réponse, merci de l'avoir porté à mon attention. – mickmackusa

+0

@mickmackusa désolé mais maintenant vote est verrouillé, s'il vous plaît modifier quelque chose, puis je vais supprimer mon downvote –