Tijdzone offset omzetten naar 4 cijfers
Dit is niet echt een PHP vraag, maar toch stel ik hem..
Voor een RSS feed heb ik de tijdzone offset in 4 cijfers nodig:
Mijn WordPress website kan de offset leveren in dit formaat: +2, +3.5, -2, -3.5, etc
Dus als voorbeeld, +3.5 zal in 4 cijfers +0330 worden.
Kent iemand een berekening / formule om dit formaat om te zetten naar 4 cijfers? Of moet ik dit zelf maar doen via een aantal handelingen in PHP?
Guido
Gewijzigd op 31/05/2023 20:51:42 door Guido -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$offset = "2.5"; // Offset in uren
// Bereken het aantal uren en minuten
$hours = floor($offset);
$minutes = ($offset - $hours) * 60;
// Maak een DateTime-object met de huidige tijd
$dateTime = new DateTime();
$offsetString = sprintf("%+03d%02d", $hours, $minutes); // Zet de offset om naar het gewenste formaat
$timeZone = new DateTimeZone($offsetString);
$dateTime->setTimezone($timeZone);
// Haal de offset op
$formattedOffset = $dateTime->format('O');
echo $formattedOffset; // Geeft "+0230" weer
?>
$offset = "2.5"; // Offset in uren
// Bereken het aantal uren en minuten
$hours = floor($offset);
$minutes = ($offset - $hours) * 60;
// Maak een DateTime-object met de huidige tijd
$dateTime = new DateTime();
$offsetString = sprintf("%+03d%02d", $hours, $minutes); // Zet de offset om naar het gewenste formaat
$timeZone = new DateTimeZone($offsetString);
$dateTime->setTimezone($timeZone);
// Haal de offset op
$formattedOffset = $dateTime->format('O');
echo $formattedOffset; // Geeft "+0230" weer
?>
Voordat ik je reactie had opgemerkt had ik zelf dit gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// get offset
$offset = get_option('gmt_offset'); // bv 2.5 of -2.5
// set prefix
$prefix = $offset >= 0 ? "+" : "-";
// remove prefix from offset
$offset_cleaned_1 = str_replace("-", "", $offset);
// get minutes
if (str_contains($offset_cleaned_1, '.75')) {
$minutes = '45';
} elseif (str_contains($offset_cleaned_1, '.5')) {
$minutes = '30';
} else {
$minutes = '00';
}
// get hours
$offset_separator = strpos($offset_cleaned_1, ".");
if ($offset_separator !== false) {
$offset_cleaned_2 = substr($offset_cleaned_1, 0, strpos($offset_cleaned_1, "."));
} else {
$offset_cleaned_2 = $offset_cleaned_1;
}
if ( strlen($offset_cleaned_2) == "1" ) {
$hours = '0'.$offset_cleaned_2;
} else {
$hours = $offset_cleaned_2;
}
// return offset in 4 digits
$offset_new = $prefix.$hours.$minutes;
return $offset_new;
?>
// get offset
$offset = get_option('gmt_offset'); // bv 2.5 of -2.5
// set prefix
$prefix = $offset >= 0 ? "+" : "-";
// remove prefix from offset
$offset_cleaned_1 = str_replace("-", "", $offset);
// get minutes
if (str_contains($offset_cleaned_1, '.75')) {
$minutes = '45';
} elseif (str_contains($offset_cleaned_1, '.5')) {
$minutes = '30';
} else {
$minutes = '00';
}
// get hours
$offset_separator = strpos($offset_cleaned_1, ".");
if ($offset_separator !== false) {
$offset_cleaned_2 = substr($offset_cleaned_1, 0, strpos($offset_cleaned_1, "."));
} else {
$offset_cleaned_2 = $offset_cleaned_1;
}
if ( strlen($offset_cleaned_2) == "1" ) {
$hours = '0'.$offset_cleaned_2;
} else {
$hours = $offset_cleaned_2;
}
// return offset in 4 digits
$offset_new = $prefix.$hours.$minutes;
return $offset_new;
?>
Maar jouw voorbeeld ziet er een stuk degelijker uit.
Toevoeging op 01/06/2023 08:31:43:
- Ariën - op 31/05/2023 23:28:31:
Ikzelf kom uit op dit handwerk:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$offset = "2.5"; // Offset in uren
// Bereken het aantal uren en minuten
$hours = floor($offset);
$minutes = ($offset - $hours) * 60;
?>
$offset = "2.5"; // Offset in uren
// Bereken het aantal uren en minuten
$hours = floor($offset);
$minutes = ($offset - $hours) * 60;
?>
Als offset negatief is, zoals bv -2.5, dan rond functie floor() hem naar beneden af, dus op -3.
Gewijzigd op 01/06/2023 08:39:51 door Guido -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
declare(strict_types=1);
// Deze string knutsel je zelf in elkaar:
$str = '2002-10-02 15:00:00 +2';
$pubDate = new \DateTimeImmutable($str);
//> string(31) "Wed, 02 Oct 2002 15:00:00 +0200"
var_dump( $pubDate->format(\DATE_RSS) );
?>
declare(strict_types=1);
// Deze string knutsel je zelf in elkaar:
$str = '2002-10-02 15:00:00 +2';
$pubDate = new \DateTimeImmutable($str);
//> string(31) "Wed, 02 Oct 2002 15:00:00 +0200"
var_dump( $pubDate->format(\DATE_RSS) );
?>
Ik weet niet goed waar jij dit moet instellen maar bij mijn wp heb ik bij instellingen tijdzone en aangepaste weergave en deze komen overeen met php/date. Zo geeft aangepast z 151 terug
Jan R op 01/06/2023 09:36:47:
Ik weet niet goed waar jij dit moet instellen maar bij mijn wp heb ik bij instellingen tijdzone en aangepaste weergave en deze komen overeen met php/date. Zo geeft aangepast z 151 terug
Ben bezig met een plugin, de RSS feed vereist de tijdzone offset in 4 cijfers: +0200 of -0200
Er is binnen WP geen standaard functie die het in dit formaat weergeeft.
Guido