Tijdzone offset omzetten naar 4 cijfers

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

31/05/2023 20:49:41
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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
Gewijzigd op 31/05/2023 20:51:42 door Guido -
 
PHP hulp

PHP hulp

19/03/2024 09:46:03
 
- Ariën  -
Beheerder

- Ariën -

31/05/2023 23:28:31
Quote Anchor link
Ikzelf kom uit op dit handwerk:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>
 
Guido  -

Guido -

01/06/2023 08:16:40
Quote Anchor link
Goedemorgen,

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>



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 -
 
Ward van der Put
Moderator

Ward van der Put

01/06/2023 09:36:43
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)  );

?>
 
Jan R

Jan R

01/06/2023 09:36:47
Quote Anchor link
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
 
Guido  -

Guido -

01/06/2023 13:14:10
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.