web-dev-qa-db-fra.com

convertir date php au format mysql

J'ai un champ de date en php qui utilise ce code:

$date = mysql_real_escape_string($_POST['intake_date']);

Comment puis-je convertir cela au format MySQL 0000-00-00 pour l'inclure dans db. Est-ce que cela ressemble à: date ('Ymd' strtotime ($ date); La raison pour laquelle je pose cette question est que j’ai essayé diverses variantes et que je ne semble pas pouvoir le faire fonctionner. Soit affiché en 1970 ou une autre variante. merci beaucoup

50
bollo
$date = mysql_real_escape_string($_POST['intake_date']);

1. Si votre colonne MySQL est DATE, tapez:

$date = date('Y-m-d', strtotime(str_replace('-', '/', $date)));

2. Si votre colonne MySQL est DATETIME, tapez:

$date = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date)));

Vous n'avez pas à travailler strototime(), car cela ne fonctionnera pas avec les séparateurs de tirets -, Il essaiera de faire une soustraction.


Mise à jour, comme votre date est formatée, vous ne pouvez pas utiliser strtotime(), utilisez plutôt ce code:

$date = '02/07/2009 00:07:00';
$date = preg_replace('#(\d{2})/(\d{2})/(\d{4})\s(.*)#', '$3-$2-$1 $4', $date);
echo $date;

Sortie:

2009-07-02 00:07:00
138
Shef

Ce site propose deux solutions assez simples - il suffit de vérifier le code, j'ai fourni les descriptions au cas où vous le voudriez - vous évite quelques clics.

http://www.richardlord.net/blog/dates-in-php-and-mysql

1.Une solution courante consiste à stocker les dates dans des champs DATETIME et à utiliser les fonctions date () et strtotime () de PHP pour effectuer une conversion entre PHP timestamps et dATETIME MySQL. Les méthodes seraient utilisées comme suit -

$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
$phpdate = strtotime( $mysqldate );

2.Notre deuxième option consiste à laisser MySQL faire le travail. MySQL a des fonctions que nous pouvons utiliser pour convertir les données au moment où nous accédons à la base de données. UNIX_TIMESTAMP convertira de DATETIME en PHP timestamp et FROM_UNIXTIME convertira de PHP timestamp en DATETIME. Les méthodes sont utilisées dans la requête SQL. Nous les insérons et les mettons à jour. dates en utilisant des requêtes comme celle-ci -

$query = "UPDATE table SET
    datetimefield = FROM_UNIXTIME($phpdate)
    WHERE...";
$query = "SELECT UNIX_TIMESTAMP(datetimefield)
    FROM table WHERE...";
15

Si vous avez une date publiée au format jj/mm/aaaa, utilisez ce qui suit:

$date = explode('/', $_POST['posted_date']);
$new_date = $date[2].'-'.$date[1].'-'.$date[0];

Si vous l'avez en mm/jj/aaaa, changez simplement la deuxième ligne:

$new_date = $date[2].'-'.$date[0].'-'.$date[1];
5
Warren Sergent

Vous recherchez les fonctions MySQL FROM_UNIXTIME() et UNIX_TIMESTAMP().

Utilisez-les dans votre code SQL, par exemple:

mysql> SELECT UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
|            1311343579 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1311343579);
+---------------------------+
| FROM_UNIXTIME(1311343579) |
+---------------------------+
| 2011-07-22 15:06:19       |
+---------------------------+
1 row in set (0.00 sec)
5
Gus

Si date_entrée est un format de date courant, vous pouvez utiliser date() et strtotime()

$mysqlDate = date('Y-m-d H:i:s', strtotime($_POST['intake_date']));

Cependant, cela ne fonctionnera que si le format de date est accepté par strtotime(). Voir c'est la page doc pour les formats supportés.

5
Bailey Parker

PHP 5.3 a des fonctions pour créer et reformater un objet DateTime à partir du format que vous spécifiez:

$mysql_date = "2012-01-02";   // date in Y-m-d format as MySQL stores it
$date_obj = date_create_from_format('Y-m-d',$mysql_date);
$date = date_format($date_obj, 'm/d/Y');
echo $date;

Les sorties:

01/02/2012

MySQL peut également contrôler le formatage en utilisant la fonction STR_TO_DATE() lors de l'insertion/la mise à jour et la fonction DATE_FORMAT() lors de l'interrogation.

$php_date = "01/02/2012";
$update_query = "UPDATE `appointments` SET `start_time` = STR_TO_DATE('" . $php_date . "', '%m/%d/%Y')";
$query = "SELECT DATE_FORMAT(`start_time`,'%m/%d/%Y') AS `start_time` FROM `appointments`";
3
Charlie
function my_date_parse($date)
{
        if (!preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $date, $m))
                return false;

        $day = $m[1];
        $month = $m[2];
        $year = $m[3];

        if (!checkdate($month, $day, $year))
                return false;

        return "$year-$month-$day";
}
2
TMS

Il y a plusieurs options.

Convertissez-le en horodatage et utilisez-le comme indiqué dans les autres messages avec strtotime() ou utilisez option d’analyse de la date de MySQL

1
Smar

Si vous connaissez le format de date dans $ _POST [absorption_date], vous pouvez utiliser exploser pour obtenir l'année, le mois et l'heure, puis les concaténer pour former une date mySql valide. par exemple, si vous obtenez quelque chose comme 15/12/1988 en date, vous pouvez faire comme ça

    $date = explode($_POST['intake_date'], '/');
    mysql_date = $date[2].'-'$date[1].'-'$date[0];

mais si vous avez une date valide date ('y-m-d', strtotime ($ date)); devrait aussi fonctionner

1
Ehtesham