Existe-t-il un moyen simple de convertir un format de date en un autre format de date en PHP?
J'ai ceci:
$old_date = date('y-m-d-h-i-s'); // works
$middle = strtotime($old_date); // returns bool(false)
$new_date = date('Y-m-d H:i:s', $middle); // returns 1970-01-01 00:00:00
Mais j'aimerais bien sûr qu'il renvoie une date actuelle plutôt que l'aube du crack. Qu'est-ce que je fais mal?
Réponses:
Le deuxième paramètre à
date()
doit être un horodatage correct (secondes depuis le 1er janvier 1970). Vous passez une chaîne que date () ne peut pas reconnaître.Vous pouvez utiliser strtotime () pour convertir une chaîne de date en horodatage. Cependant, même strtotime () ne reconnaît pas le
y-m-d-h-i-s
format.PHP 5.3 et supérieur
Utilisez
DateTime::createFromFormat
. Il vous permet de spécifier un masque exact - en utilisant ladate()
syntaxe - pour analyser les dates de chaîne entrantes avec.PHP 5.2 et inférieur
Vous devrez analyser les éléments (année, mois, jour, heure, minute, seconde) manuellement en utilisant
substr()
et remettre les résultats à mktime () qui vous construira un horodatage.Mais ça fait beaucoup de travail! Je recommande d'utiliser un format différent que strftime () peut comprendre. strftime () comprend toute entrée de date avant
the next time joe will slip on the ice
. par exemple, cela fonctionne:la source
DateTime
existe depuis PHP 5.2 dans le noyau PHP et le support expérimental pourDateTime
peut être activé pour PHP 5.1 lors de la compilation. secure.php.net/manual/en/datetime.installation.phpLa façon la plus simple de le faire est
Vous lui donnez d'abord le format $ dateString. Ensuite, vous lui indiquez le format dans lequel $ newDateString doit être.
Cela évite également l'utilisation de strtotime, qui peut parfois être difficile à travailler.
Si vous ne passez pas d'un format de date à un autre, mais que vous voulez simplement la date actuelle (ou datetime) dans un format spécifique, c'est encore plus facile:
Cette autre question se réfère également au même sujet: Convertir le format de date aaaa-mm-jj => jj-mm-aaaa .
la source
$timestring = $now->format('Y-m-d h:i:s');
sûrement?m
pendant des mois,i
des minutesLes bases
La manière la plus simple de convertir un format de date en un autre est d'utiliser
strtotime()
avecdate()
.strtotime()
convertira la date en horodatage Unix . Cet horodatage Unix peut ensuite être transmis pourdate()
le convertir au nouveau format.Ou en monoplace:
N'oubliez pas que
strtotime()
la date doit être dans un format valide . Si vous ne fournissez pas un format valide, le résultat serastrtotime()
faux, ce qui entraînera la date du 31 décembre 1969.En utilisant
DateTime()
Depuis PHP 5.2, PHP offrait la
DateTime()
classe qui nous offre des outils plus puissants pour travailler avec les dates (et l'heure). Nous pouvons réécrire le code ci-dessus en utilisantDateTime()
comme suit:Travailler avec les horodatages Unix
date()
prend un horodatage Unix comme deuxième paramètre et renvoie une date formatée pour vous:DateTime () fonctionne avec les horodatages Unix en ajoutant un
@
avant l'horodatage:Si l'horodatage que vous avez est en millisecondes (il peut se terminer en
000
et / ou l'horodatage est de treize caractères), vous devrez le convertir en secondes avant de pouvoir le convertir dans un autre format. Il y a deux façons de procéder:substr()
Le découpage des trois derniers chiffres peut être obtenu de plusieurs manières, mais l'utilisation
substr()
est la plus simple:Vous pouvez également convertir l'horodatage en secondes en divisant par 1000. Parce que l'horodatage est trop grand pour que les systèmes 32 bits fassent des calculs, vous devrez utiliser la bibliothèque BCMath pour effectuer les calculs sous forme de chaînes:
Pour obtenir un horodatage Unix, vous pouvez utiliser
strtotime()
ce qui renvoie un horodatage Unix:Avec DateTime (), vous pouvez utiliser
DateTime::getTimestamp()
Si vous utilisez PHP 5.2, vous pouvez utiliser l'
U
option de formatage à la place:Utilisation de formats de date non standard et ambigus
Malheureusement, toutes les dates avec lesquelles un développeur doit travailler ne sont pas au format standard. Heureusement, PHP 5.3 nous a fourni une solution pour cela.
DateTime::createFromFormat()
nous permet de dire à PHP dans quel format une chaîne de date est afin qu'elle puisse être analysée avec succès dans un objet DateTime pour une manipulation ultérieure.En PHP 5.4, nous avons gagné la possibilité de faire un accès aux membres de la classe lors de l'instanciation, ce qui nous permet de transformer notre
DateTime()
code en une ligne:la source
Essaye ça:
la source
Convertir
$date
partirdd-mm-yyyy hh:mm:ss
d'un datetime MySQL approprié, je vais comme ceci:la source
Fatal error: Call to a member function format() on a non-object
. Juste un avertissement!Ce qui suit est une méthode simple pour convertir des dates en différents formats.
la source
vous vous trompez ici, cela devrait être
le séparateur de temps est ':'
Je pense que ça aidera...
OU
la source
Cette méthode native aidera à convertir tout format saisi au format souhaité.
la source
Vous devez reconvertir $ old_date en horodatage, car la fonction date requiert un horodatage comme deuxième argument.
la source
strtotime s'en occupera. les dates ne sont tout simplement pas les mêmes et toutes au format américain.
la source
Essaye ça:
la source
Cela a résolu pour moi,
Sortie: 2018-04-18
la source
C'est l'autre façon de convertir le format de date
la source
Utiliser des chaînes, c'est pour moi une bonne solution, moins de problèmes avec mysql. Détecte le format actuel et le change si nécessaire, cette solution est uniquement pour le format espagnol / français et le format anglais, sans utiliser la fonction php datetime.
UTILISATION
la source
Je sais que c'est vieux, mais, en rencontrant un fournisseur qui utilise de manière incohérente 5 formats de date différents dans leurs API (et teste des serveurs avec une variété de versions PHP des 5 aux 7 dernières), j'ai décidé d'écrire un convertisseur universel qui fonctionne avec une myriade de versions PHP.
Ce convertisseur prendra pratiquement n'importe quelle entrée, y compris n'importe quel format de date / heure standard (y compris avec ou sans millisecondes) et heure toute représentation Epoch Time (y compris avec ou sans millisecondes) et le convertira dans pratiquement n'importe quel autre format.
Pour l'appeler:
L'envoi de null pour le format fera que la fonction retournera le datetime en Epoch / Unix Time. Sinon, envoyez n'importe quelle chaîne de format prise en charge par date (), ainsi qu'avec ".u" pour les millisecondes (je gère également les millisecondes, même si date () renvoie des zéros).
Voici le code:
Voici quelques exemples d'appels - vous remarquerez qu'il gère également toutes les données de fuseau horaire (bien que, comme indiqué ci-dessus, toute heure non GMT soit renvoyée dans votre fuseau horaire).
Voici la sortie:
La seule chose qui ne se trouve pas dans cette version est la possibilité de sélectionner le fuseau horaire dans lequel vous voulez que le datetime retourné se trouve. Il est cependant trivial d'ajouter.
la source