Diverse tid og dato eksempler i PHP.
Formatere datoer
date
og DateTime
bruker kun engelsk format. For å formatere i et annet språk, bruk datefmt_format
(IntlDateFormatter
).
strftime
er deprecated siden PHP 8.1.
date/DateTime
echo date("d. F Y");
$date = new DateTime('2000-01-01');
echo $date->format('d. F Y H:i:s');
datefmt_format/IntlDateFormatter
Man må ha intl
-modulen for å bruke denne funksjonen.
Dokumentasjon IntlDateFormatter
Formater for bruk i IntlDateFormatter
Formater for bruk i DateTime::createFromFormat
$fmt = new IntlDateFormatter('nb_NO');
$fmt->setTimeZone('Europe/Oslo');
$fmt->setPattern('eeee d LLLL yyyy kk:mm:ss');
echo $fmt->format(DateTime::createFromFormat('Y-m-d', '2022-04-13'));
echo $fmt->format(192345222);
$fmt->setPattern('LLLL');
echo $fmt->format(DateTime::createFromFormat('!m', '5'));
echo $fmt->format(new DateTime());
Jobbe med datoer
Beregn start og slutt dato med klokkeslett til bruk i SQL spørringer (datetime BETWEEN start AND end) med hensyn til utc/sommer/vintertid. Går ut ifra at dato er lagret i UTC tid, og server default er UTC.
public function getStartAndEnd($date_start, $date_end, $format_end = null, $week = null, $year = null)
{
$tz_in = new DateTimeZone('Europe/Oslo');
$tz_out = new DateTimeZone('UTC');
if(!is_null($week) && !is_null($year)) {
$date_start = new DateTime();
$date_start->setISODate($year, $week);
} else {
$date_start = DateTime::createFromFormat('Y-m-d', $date_start);
}
$date_start->setTimezone($tz_in);
$date_start->setTime(0, 0);
$date_start->setTimezone($tz_out);
$start = $date_start->format('Y-m-d H:i:00');
// Uke
if(!is_null($week) && !is_null($year)) {
$date_start->add(new DateInterval('PT168H'));
$end = $date_start->format('Y-m-d H:i:s');
}
else {
$date_end = DateTime::createFromFormat('Y-m-d', $date_end);
$date_end->setTimezone($tz_in);
$date_end->setTime(23, 59);
$date_end->setTimezone($tz_out);
$end = $date_end->format('Y-m-' . (is_null($format_end) ? 'd' : $format_end) . ' H:i:s');
}
return [$start, $end];
}
var_dump(getStartAndEnd('2021-11-13', '2021-11-20'));
// output: { [0]=> string(19) "2021-11-12 23:00:00" [1]=> string(19) "2021-11-20 22:59:00" }
var_dump(getStartAndEnd('2022-03-01', '2021-03-31', 't'));
// output: { [0]=> string(19) "2022-02-28 23:00:00" [1]=> string(19) "2021-03-31 21:59:00" }
var_dump(getStartAndEnd('2021-01-01', '2021-12-31', 'd'));
// output: { [0]=> string(19) "2020-12-31 23:00:00" [1]=> string(19) "2021-12-31 22:59:00" }
var_dump(getStartAndEnd(null, null, null, '14', '2021'));
// output: { [0]=> string(19) "2021-04-04 22:00:00" [1]=> string(19) "2021-04-11 21:59:00" }