Goedenavond forum leden,

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:
<pubDate>Wed, 02 Oct 2002 15:00:00 +0200</pubDate>


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
Ikzelf kom uit op dit handwerk:

<?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
?>
Goedemorgen,

Voordat ik je reactie had opgemerkt had ik zelf dit gemaakt:


<?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;
?>



Maar jouw voorbeeld ziet er een stuk degelijker uit.

[size=xsmall]Toevoeging op 01/06/2023 08:31:43:[/size]

- Ariën - op 31/05/2023 23:28:31

Ikzelf kom uit op dit handwerk:

<?php

$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.

<?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)  );

?>
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

Reageren