Convertir un format de date dans un autre en PHP
Est-il un moyen simple de convertir un format de date dans 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 évidemment le retour d'une date actuelle plutôt que de la fissure 'o de l'aube. Ce que je fais mal?
tech-blog.maddyzone.com/php/type-date-convert-php très bel article
stackoverflow.com/questions/2167916/...
stackoverflow.com/questions/2167916/...
OriginalL'auteur Tom | 2010-01-30
Vous devez vous connecter pour publier un commentaire.
Le deuxième paramètre à
date()
doit être un bon timestamp (secondes depuis le 1er janvier 1970). Vous passez une chaîne de caractères, qui date() ne peut pas reconnaître.Vous pouvez utiliser strtotime() pour convertir une date en chaîne de caractères dans un horodatage. Cependant, même la fonction strtotime() ne reconnaît pas le
y-m-d-h-i-s
format.PHP 5.3 et
Utilisation
DateTime::createFromFormat
. Il vous permet de spécifier une valeur précise de masque - à l'aide de ladate()
de la syntaxe pour analyser entrant chaîne de dates avec.PHP 5.2 et inférieur
Vous aurez à analyser les éléments (année, mois, jour, heure, minute, seconde) manuellement à l'aide de
substr()
et de la main les résultats de mktime() qui va vous construire un timestamp.Mais c'est beaucoup de travail! Je recommande d'utiliser un autre format strftime() peut comprendre. strftime() comprend tout date d'entrée court de
the next time joe will slip on the ice
. par exemple, cela fonctionne:J'ai édité la réponse alors que vous l'avez accepté 🙂 j'ai ajouté un peu plus d'exemples et de références.
Gotcha, c'est en effet le problème. C'est un nom de fichier fixe j'ai besoin de reconvertir en un jour (a à être dans ce format), donc je vais trouver une solution de contournement.
Remarque: Selon php.net
DateTime
existe depuis PHP 5.2 au coeur de PHP et de experimential soutien pourDateTime
peut être activé pour PHP 5.1 lors de la compilation. secure.php.net/manual/en/datetime.installation.phpOriginalL'auteur Pekka 웃
La façon la plus simple pour ce faire est
Vous êtes le premier de lui donner le format $dateString est dans. Puis vous indiquez le format que vous voulez $newDateString être.
Cela permet aussi d'éviter l'utilisation de la fonction strtotime, ce qui peut être difficile à certains moments.
Si vous n'êtes pas la transformation d'un format de date à l'autre, mais juste envie de la date courante (ou de type datetime) dans un format spécifique, alors il est encore plus facile:
Cette autre question se réfère également à la même rubrique: Convertir le format de date aaaa-mm-jj => jj-mm-aaaa.
J'ai édité la réponse. Je voulais juste faire remarquer que ces deux questions devraient être lié en quelque sorte.
disponible dans php 5.3+
$timestring = $now->format('Y-m-d h:i:s');
sûrement?m
pendant des mois,i
pour les minutesméthodes statiques: secure.php.net/manual/en/language.oop5.static.php
OriginalL'auteur ceiroa
Les Bases
La simplist moyen de convertir un format de date à l'autre est d'utiliser
strtotime()
avecdate()
.strtotime()
vous permet de convertir la date en Le Timestamp Unix. Que le Timestamp Unix peuvent ensuite être transmis àdate()
convertir au nouveau format.Ou comme un one-liner:
Gardez à l'esprit que
strtotime()
nécessite la date dans un format valide. À défaut de fournir un format valide entraînerastrtotime()
retour faux qui sera la cause de votre date 1969-12-31.À l'aide de
DateTime()
De PHP 5.2, PHP offert le
DateTime()
classe qui nous offre des outils plus puissants pour travailler avec des dates (et le temps). Nous pouvons réécrire le code ci-dessus à l'aide deDateTime()
de la manière suivante:De travail avec des timestamps Unix
date()
prend un Unix timeatamp comme second paramètre et retourne une date formatée pour vous:DateTime() fonctionne avec des timestamps Unix par l'ajout d'une
@
avant de l'horodatage:Si le timestamp que vous avez est en millisecondes (il peut finir dans
000
et/ou le timestamp est treize caractères de long), vous devrez le convertir en secondes avant que vous pouvez convertir en un autre format. Il y a deux façons de le faire:substr()
Tailler les trois derniers chiffres peut être obtenue de plusieurs façons, mais en utilisant
substr()
est la plus facile:Vous pouvez également convertir le timestamp en secondes en divisant par 1000. Parce que le timestamp est trop grand pour les systèmes 32 bit pour faire des maths sur, vous devrez utiliser le BCMath bibliothèque pour faire le calcul comme des chaînes de caractères:
Pour obtenir un Timestamp Unix, vous pouvez utiliser
strtotime()
qui retourne un Timestamp Unix:Avec DateTime (), vous pouvez utiliser
DateTime::méthode gettimestamp()
Si vous êtes en cours d'exécution de PHP 5.2, vous pouvez utiliser le
U
option de mise en forme à la place:De travail non-standard et ambiguës, les formats de date
Malheureusement pas toutes les dates qu'un développeur a à travailler avec sont dans un format standard. Heureusement, PHP 5.3, nous a fourni une solution pour cela.
DateTime::createFromFormat()
nous permet de dire à PHP quel est le format d'une chaîne de date de sorte qu'il peut être correctement analysé dans un objet DateTime pour plus de manipulation.En PHP 5.4, nous avons acquis la capacité de faire de membre de la classe d'accès sur l'instanciation a été ajoutée, ce qui nous permet de transformer notre
DateTime()
code dans un one-liner:OriginalL'auteur John Conde
Essayez ceci:
d'accord, je viens de mettre dans le format de code à partir de l'interlocuteur, il devrait être bon format spécifié.
Il a travaillé pour moi. My $old_date quelque chose comme 2012-05-22T19:16:37+01:00. Grâce par le moyen!
OriginalL'auteur Sarfraz
Pour convertir
$date
dedd-mm-yyyy hh:mm:ss
à un bon datetime de MySQLJe vais comme ceci:
Fatal error: Call to a member function format() on a non-object
. Juste un heads-up!Vrai, une meilleure solution est de le faire en 3 étapes avec une valeur null vérifier que l'étape intermédiaire.
OriginalL'auteur Jelle de Fries
que vous faites mal ici, ce devrait être
séparateur de temps est ':'
Je pense que cela vous aidera...
OU
OriginalL'auteur Rifat
Ce qui suit est une méthode facile de convertir des dates dans différents formats.
OriginalL'auteur Peter
Vous avez besoin de convertir les $old_date de retour dans un timestamp, comme le fonction de la date nécessite un timestamp comme second argument.
OriginalL'auteur John Parker
strtotime va travailler ça. les dates sont juste pas les mêmes et tous en nous-format.
OriginalL'auteur de_nuit
Essayez ceci:
OriginalL'auteur vineet
Ce natif de manière à convertir n'importe quel format d'entrée dans le format désiré.
OriginalL'auteur Nishad Up
Cela a résolu pour moi,
De sortie : 2018-04-18
OriginalL'auteur Ashokkumar C
C'est l'autre façon, vous pouvez convertir le format de date
OriginalL'auteur Varun Malhotra
Juste à l'aide de cordes, pour moi, c'est une bonne solution, moins de problèmes avec mysql. Détecte le format actuel et des changements si nécessaire, cette solution n'est pour l'espagnol/français format et format anglais, sans utiliser php datetime fonction.
UTILISATION
OriginalL'auteur Alejandro Aranda
Je sais que c'est vieux, mais, en cours d'exécution dans un fournisseur qui utilise de façon incohérente 5 formats de date différents dans leurs Api (et les serveurs de test avec une variété de versions de PHP antérieures à partir du 5 jusqu'au plus tard 7), j'ai décidé d'écrire un convertisseur universel qui fonctionne avec une multitude de versions de PHP.
Ce convertisseur permet de prendre pratiquement n'importe quelle entrée, y compris n'importe quel standard de format datetime (y compris avec ou sans millisecondes) et toute Époque de la représentation (y compris avec ou sans millisecondes) et de le convertir pratiquement n'importe quel autre format.
L'appeler:
L'envoi de la valeur null pour le format, la fonction retourne la date /heure à l'Époque Unix/Temps. Sinon, envoyez toute chaîne de format de date() prend en charge, ainsi qu'aux ".u" pour millisecondes (j'ai la poignée de millisecondes ainsi, même si la date() renvoie zéro).
Voici le code:
Voici quelques exemples d'appels - vous allez noter qu'elle gère toutes les données de fuseau horaire (même si, comme indiqué ci-dessus, non sur l'heure GMT est retourné dans votre fuseau horaire).
Voici le résultat:
La seule chose qui n'est pas dans cette version est la possibilité de sélectionner le fuseau horaire que vous souhaitez le retour de l'datetime pour être dans. A l'origine, j'ai écrit ça change tout datetime à l'Époque, donc, je n'ai pas besoin de temps de la zone de soutien. Il est trivial de l'ajouter.
OriginalL'auteur Robert Mauro