Comment convertir un nombre donné de jours de l'année, le mois et le jour dans MySQL?
J'essaie d'obtenir la date et de la durée de temps entre l'Emprunt souscrit et Payé date. J'ai utilisé le PHP fonctions de date et heure, mais il n'est pas toujours exacte. Comment puis-je le faire avec précision dans MySQL?
Nous supposons que deux dates, L'Emprunt date
2009-05-24
et de l'Emprunt date de retour
2012-04-30
- Je écrire une requête MySQL
SELECT DATEDIFF('2012-04-30', '2009-05-24') `total_days`;
retour 1072 jours, ce qui est à peu près 2 Ans, 11 Mois et 12 Jours.
Veuillez ne pas répondre avec du code PHP, j'ai déjà essayer. Ici, c'est le
code.
La fonction ci-dessous utilise le PHP >= 5.3 fonctions et les convertir en quelques jours à des années, des mois et des jours.
function date_interval($date1, $date2)
{
$date1 = new DateTime($date1);
$date2 = new DateTime($date2);
$interval = date_diff($date2, $date1);
return ((($y = $interval->format('%y')) > 0) ? $y . ' Year' . ($y > 1 ? 's' : '') . ', ' : '') . ((($m = $interval->format('%m')) > 0) ? $m . ' Month' . ($m > 1 ? 's' : '') . ', ' : '') . ((($d = $interval->format('%d')) > 0) ? $d . ' Day' . ($d > 1 ? 's' : '') : '');
}
La fonction ci-dessous utilise le PHP >= 5.2 fonctions et les convertir en quelques jours à des années, des mois et des jours.
function date_interval($date1, $date2)
{
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365 * 60 * 60 * 24));
$months = floor(($diff - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 * 24) / (60 * 60 * 24));
return (($years > 0) ? $years . ' Year' . ($years > 1 ? 's' : '') . ', ' : '') . (($months > 0) ? $months . ' Month' . ($months > 1 ? 's' : '') . ', ' : '') . (($days > 0) ? $days . ' Day' . ($days > 1 ? 's' : '') : '');
}
Vous aurez probablement besoin d'une procédure stockée ou une fonction pour le faire dans MySQL.
OriginalL'auteur Madan Sapkota | 2012-05-26
Vous devez vous connecter pour publier un commentaire.
Le principal problème est comme suit:
datediff()
datediff()
renvoie la différence en jours.from_days()
from_days()
ne fonctionne pas vraiment avant 1582, pour citer un extrait de la documentation:Le minimum est de 1582 comme c'était au moment où l'Europe converti à partir du Julien au calendrier Grégorien.
0000-00-00 + 6 jours est 0000-01-06, est antérieure à celle de 1582.
Cela signifie que MySQL date-fonctions sont inutiles pour vous.
Vous demander que cela soit fait de MySQL "correctement". Comme vous ne pouvez pas utiliser les fonctions de date, vous allez devoir faire votre propre. Cette ne être précis. Combien de jours dans une année? Ce n'est certainement pas toujours 365. Combien de jours sont là dans un mois?
Je vous recommande fortement de faire cela en PHP.
Cependant, comme vous êtes inflexible sur le fait que vous ne voulez pas le faire, vous allez avoir à tricher.
Ajouter la date 1600-01-01 à tout. Ensuite, retirer 1600 ans, 1 mois et 1 jour de votre réponse à la fin. Je n'utilise que cette date parce que c'est plus grand que 1582 et c'est un beau chiffre rond. Ce qui fonctionne vraiment, mais le plus tôt est le mieux, de sorte que vous ne courez pas dans les problèmes.
En supposant que nous avons construit le tableau suivant:
La requête suivante obtiendrez ce que vous voulez:
Voici un SQL Violon pour le prouver.
Une fois de plus, c'est vraiment très hacky et pas vraiment recommandé.
J'en doute :-).
Utilisé la version de PHP. En 2014.
OriginalL'auteur Ben
Utilisation de MySQL
TIMESTAMPDIFF()
fonction:Voir sur sqlfiddle.
OriginalL'auteur eggyal
J'ai utilisé ceci:
OriginalL'auteur cjmancor
OriginalL'auteur Andrius Naruševičius