sql >> Databasteknik >  >> RDS >> Mysql

PHP Konvertera datum till tomma dagar/timmar/sekunder sedan

Du bör alltid spara dina datum i MySQL:s datetime-format (ÅÅÅÅ-MM-DD). Detta gör att du enkelt kan dra nytta av MySQL:s inbyggda datumfunktionalitet. Att lagra det i något annat format innebär (potentiellt mycket) mer arbete för dig när du vill göra mer än att bara visa dessa värden.

För att åstadkomma det du vill göra med PHP skulle du DateTime() (baserat på det här svaret ):

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
    $elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
    $elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
    $elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
    echo $elapsed;
}
else 
{
    echo $firstDate;
}

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);

Dessa rader skapar DateTime() objekt med sina respektive datum.

$interval  = $datetime1->diff($datetime2);

Dessa rader subtraherar det andra datumet från det första och returnerar skillnaden som en DateInterval() objekt.

if ($interval->days > 7)

Den här raden kontrollerar att sju eller fler dagar har förflutit mellan de två datumen. Om så är fallet exekveras det första kodblocket. Om inte, skrivs det första datumet ut.

$elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;

Detta kodblock tar bara datumskillnaden mellan de två datumen (en DateInterval( ) objekt) och formaterar det i det format du begärde. Den andra raden tar bort alla tidsperioder som inte har några värden (dvs. 0 månader) och tar bort dem från strängen. Den tredje raden tar alla perioder med ett värde (dvs. 1 månad) och klipper bort de onödiga "s" i slutet (dvs. 1 månad blir 1 månad).




  1. Deklarera tupelstrukturen för en post i PL/pgSQL

  2. QueryException SQLSTATE[HY000] [1045] Åtkomst nekad för användaren 'homestead'@'localhost' (med lösenord:JA)

  3. NodeJS MySQL:mäta frågekörningstiden

  4. UTF-8, PHP och XML Mysql