J'aime beaucoup la strtotime()
fonction, mais le manuel d'utilisation ne donne pas une description complète des formats de date pris en charge. strtotime('dd/mm/YYYY')
ne fonctionne pas, cela fonctionne uniquement avec le mm/dd/YYYY
format.
Si j'ai une date au dd/mm/YYYY
format, comment puis-je la convertir YYYY-mm-dd
? Je peux le faire en utilisant la explode()
fonction, mais je pense qu'il existe de meilleures solutions.
str_replace('/', '-', $date);
Réponses:
Voici la solution simplifiée:
Résultat:
La
strtotime
documentation lit:la source
echo date('Y-m-l', strtotime('01-01-2010'));
Le résultat est2010-01-Friday
. Ainsi, le jour qui vient à la fin dépend de la façon dont vous spécifiez le format de date à ladate
fonction.$date = '25/05/2010'; $date = str_replace('/', '-', $date);
la ligne supplémentaire n'est pas nécessaire pour résoudre votre problème.Vous pouvez analyser les dates à partir d'un format personnalisé (à partir de PHP 5.3) avec DateTime :: createFromFormat
(À part: Le
!
est utilisé pour réinitialiser les valeurs non spécifiées sur l'horodatage Unix, c'est-à-dire que l'heure sera minuit.)Si vous ne voulez pas (ou ne pouvez pas) utiliser PHP 5.3, alors une liste complète des formats de date / heure disponibles que strtotime accepte est répertoriée sur la page de manuel des formats de date . Cette page décrit plus à fond le fait que
m/d/Y
inférée plusd/m/Y
(mais vous pouvez, comme mentionné dans les réponses ici, l' utilisationd-m-Y
,d.m.Y
oud\tm\tY
).Dans le passé, j'ai également eu recours au quicky
str_replace
mentionné dans une autre réponse, ainsi qu'à l'analyse automatique de la chaîne de date dans un autre format commela source
C'est une bonne solution à de nombreux problèmes:
la source
À partir de l'écriture STRTOTIME Remarque:
Les dates aux formats m / j / y ou dmy sont clarifiées en regardant le séparateur entre les différents composants: si le séparateur est une barre oblique (/), alors l'américain m / j / y est supposé; alors que si le séparateur est un tiret (-) ou un point (.), alors le format européen dmy est utilisé.
C'est aussi simple que ça.
la source
$t
et que j'ai$t1
affiché un résultat différent. J'ai vérifié comme ça.$t=strtotime(date('d-m-Y'));
et$t1=strtotime(date('m/d/Y'));
le plus rapide devrait probablement être
cela retournera false si le format ne ressemble pas au format correct, mais cela ne vérifiera pas si la date est valide
la source
Je n'ai pas trouvé de meilleure solution. Vous pouvez utiliser
explode()
,preg_match_all()
etc.J'ai une fonction d'assistance statique comme celle-ci
Il y a probablement un meilleur nom pour cela, mais je l'utilise
ausStrToTime()
parce qu'il fonctionne avec des dates australiennes (avec lesquelles je travaille souvent, étant australien). Un meilleur nom serait probablement le nom standardisé, mais je ne suis pas sûr de ce que c'est.la source
J'ai essayé de convertir le format ddmmyy au
date("Y-m-d"
format mais ne fonctionnait pas lorsque je passe directementddmmyy =date('dmy')
puis réalisé qu'il doit être au format aaaa-mm-jj donc. utilisé sous-chaîne pour organiser
puis passé à
date("Y-m-d",strtotime($strParam));
ça a marché!
la source
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
Cela fonctionnera pour vous. Vous convertissez la chaîne en un format de date personnalisé où vous pouvez spécifier à PHP quel est le format d'origine de la chaîne qui lui a été donné. Maintenant qu'il s'agit d'un format de date, vous pouvez le convertir au format de date par défaut de PHP, qui est le même que celui utilisé par MySQL.
la source
Obtenez-vous cette valeur d'une base de données? Si tel est le cas, envisagez de le formater dans la base de données (à utiliser
date_format
dans mysql, par exemple). Sinon, l'explosion de la valeur peut être le meilleur pari, car strtotime ne semble tout simplement pas apprécier les valeurs jj / mm / aaaa.la source
Si vous savez que c'est en jj / mm / AAAA, vous pouvez faire:
Il correspondra aux dates sous la forme j / m / AA ou jj / mm / AAAA (ou toute combinaison des deux) ...
Si vous souhaitez prendre en charge plus de séparateurs que juste /, vous pouvez changer l'expression régulière en:
Et puis ajoutez tous les caractères souhaités dans le
[/-]
bit (notez que le caractère - doit être le dernier)la source
\d
pour les chiffres décimaux plutôt que[/d]
pour la barre oblique ou le caractère d .Cette solution de contournement est plus simple et plus élégante que d'exploser:
Vous n'avez pas besoin de savoir dans quel format vous obtenez la date, mais si elle est accompagnée de barres obliques, elles sont remplacées par des points et elle est traitée comme européenne par strtotime.
la source
La solution la plus simple est la suivante:
la source
C'est la solution que j'utilise même si le zéro non significatif est là.
la source
$ date_info = '20 / 02/2019 '; echo date ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
la source
Aussi simple que ça
la source