À l'aide de la fonction strtotime pour les dates avant 1970
J'ai une colonne de texte dans mysql et il stocke une valeur de date dans le format aaaa-mm-jj.
Maintenant, dans ma page php, j'utilise ce code pour parser en valeur de date.
date("F j, Y", strtotime($row['value']));
Maintenant, je viens de lire que la fonction strtotime() analyse des valeurs qu'après le 1er janvier 1970. J'ai beaucoup de valeurs à la date d'avant cette date. Est-il un travail? Je ne veux pas changer ma structure de base de données.
OriginalL'auteur Ctroy | 2010-05-20
Vous devez vous connecter pour publier un commentaire.
De la documentation de
strtotime()
:Quelle version de PHP en cours d'exécution? Et sur quelle plateforme? Peut-être qu'il est temps pour une mise à niveau.
Si vous travaillez avec des dates en dehors de l'13 Décembre 1901 à 19 janvier 2038 à la plage, pensez à utiliser de PHP DateTime les objets qui peuvent travailler avec un large éventail de dates.
De procédure:
POO:
J'ai php5.2.6, strtotime montre encore vierge de date antérieure à 1970. Où avez-vous vu "avant 5.1.0..." chose?
Un horodatage est un entier signé; les valeurs négatives sont utilisés pour les secondes avant le 1970-01-01 00:00:00 GMT, et ont été sur toutes les plateformes depuis 5.1.0..... référence est faite dans la section des Notes sur la docs de la page (note 2)
Merci! Je viens de rater les Notes de la partie.
OriginalL'auteur Mark Baker
vous devez utiliser un
date
columnn, pas de texte.et
date_format()
de la fonction SQL au format de date dans la requêteDans ce cas, vous avez besoin de revoir la conception de votre base de données.
Vous dites qu'il n'y a pas de travail à ce problème, sans la refonte de la base de données? Je veux juste convertir un texte de format aaaa-mm-jj pour le format de date F j, Y. par exemple: 1820-05-20 au 20 Mai 1820.
il n'y a pas de problème pour la date. Et la solution que j'avais écrit. Bot pour l'ensemble de votre base de données, vous avez déjà ruinée, si vous avez des données de nature différente dans une seule colonne. Il n'y a pas de solution et il vous mènera tout droit à la catastrophe
OriginalL'auteur Your Common Sense
en effet, vous avez raison. Cependant, ce que @Ctroy demande est un moyen d'avoir une ISO 8601 date, donc je suppose que mon imprécision pourrait être pardonné!
OriginalL'auteur Gombo
OriginalL'auteur katamaraju
Je suis un noob, et avait des problèmes similaires concernant l'utilisation de la fonction strtotime vs exploser. J'ai couru à travers ce fil et a été grandement aidé par les commentaires sur le changement de la date limite de Mark Baker (merci!). J'ai donc écrit ce code juste pour jouer avec le concept. Peut-être que cela aidera d'autres noobs comme moi.
Il suffit de changer la date sur le haut de PHP en ligne et de voir ce qui se passe pour les dates ci-dessous, très intéressante.
Merci encore!
OriginalL'auteur TimSPQR
Juste de mettre à jour cette pour les temps modernes, PHP7 la fonction strtotime() sur un système 64 bits peut gérer n'importe quelle ANNONCE de la date, même si, pour une raison quelconque, la page de man dit encore des années 1970.
Résultat:
Et
Résultat
Quel système d'exploitation êtes-vous? Est-il une version 64 bits de l'OS? Il fonctionne sur Linux, FreeBSD et mac OSX. la fonction strtotime() génère un négatif date pour les dates avant 1970. Pour aller au-delà de 65 ans, vous avez besoin d'une version 64 bits.
Windows 10 64 bits, quand je copie ton code, il montre que "le timbre:"
Sonne comme la fonction strtotime est de retour faux? Serions-nous surpris si windows est 5 ans de retard sur le temps? Désolé, mais je n'ai pas de php sur un système windows, donc je ne peux pas le tester.
Trouvé ce stackoverflow.com/a/10924871/4220457 pour être très utile car je ne peux pas comprendre pourquoi ça ne fonctionne pas
OriginalL'auteur Danial