strftime spaties bij 'single digits'
Het is me nooit eerder opgevallen, maar nu ineens wel.
Als je de functie strftime gebruikt worden er bij bijv %A (1-31) %k (0-23) %l (1-12) een spatie vooraf toegevoegd bij een 'single digit'. Dit staat ook op php.net dus betreft geen bug, maar ik snap de reden hiervan niet? Ik zie rare manieren om dit weer te voorkomen, wat me ook niet de manier lijkt.
Als je dit gewoon in je HTML gebruikt valt de spatie weg, maar als je het, in mijn geval, in een title attribuut van een link gebruikt, zie je 't wel.
Voorbeeldje:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<a href="" title="vrijdag 7 februari 2020">vrijdag 7 februari 2020</a><br>
<a href="" title="zaterdag 8 februari 2020">zaterdag 8 februari 2020</a><br>
<a href="" title="zondag 9 februari 2020">zondag 9 februari 2020</a><br>
<a href="" title="maandag 10 februari 2020">maandag 10 februari 2020</a><br>
<a href="" title="dinsdag 11 februari 2020">dinsdag 11 februari 2020</a><br>
<a href="" title="woensdag 12 februari 2020">woensdag 12 februari 2020</a><br>
<a href="" title="zaterdag 8 februari 2020">zaterdag 8 februari 2020</a><br>
<a href="" title="zondag 9 februari 2020">zondag 9 februari 2020</a><br>
<a href="" title="maandag 10 februari 2020">maandag 10 februari 2020</a><br>
<a href="" title="dinsdag 11 februari 2020">dinsdag 11 februari 2020</a><br>
<a href="" title="woensdag 12 februari 2020">woensdag 12 februari 2020</a><br>
En als je de spatie weglaat:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
vrijdag 7 februari 2020
zaterdag 8 februari 2020
zondag 9 februari 2020
maandag10 februari 2020
dinsdag11 februari 2020
woensdag12 februari 2020
zaterdag 8 februari 2020
zondag 9 februari 2020
maandag10 februari 2020
dinsdag11 februari 2020
woensdag12 februari 2020
Code die is gebruikt om te testen
Code (php)
Voornamelijk dus de vraag waarom dit bewust is gedaan. En twee of er een hele simpele fix voor is.
Dit staat uitgelegd in de pagina waar je naar linkte? Discrepanties in standaards oid. En als je %#d oid gebruikt zoals daar wordt voorgesteld? Afhankelijk van het platform wat je gebruikt.
Het enige dat ik me kan indenken waarom dit gedaan is is om zo aan een vaste lengte te komen als je geen namen voor bijvoorbeeld de maanden gebruikt.
Quote:
En als je %#d oid gebruikt zoals daar wordt voorgesteld?
Dit betreft een fix voor Windows. Het script draait op Linux.
%d is met 'leading zero' en sowieso al zonder spatie vooraf. %d en %#d geven dan ook het zelfde resultaat.
%#e maakt ook geen verschil.
Toevoeging op 11/02/2020 20:22:16:
Frank Nietbelangrijk op 11/02/2020 19:58:02:
Het enige dat ik me kan indenken waarom dit gedaan is is om zo aan een vaste lengte te komen als je geen namen voor bijvoorbeeld de maanden gebruikt.
Dat zou kunnen. Zoals het voorbeeld op php.net dat ze laten zien van een agenda. Maar dan kun je dit toch makkelijker zelf toevoegen, dan dat je 't moet verwijderen indien je 't niet wil. Dan lijkt mij. Met DateTime vervangen ze ook niet de 0 door een spatie.
Met je eens maar het PHP dev team bestond de eerste jaren volgens mij uit een paar C programmeurs van het eerste uur. Zij implementeerden PHP functies als een exacte kopie uit de C taal. En C bestond al lang voor Windows en PHP en zelfs het internet. In die tijd waren de pixels op een beeldscherm nog te tellen en waren er nog geen fonts en dergelijke. Elke letter of teken was even breed en dus was het wellicht geen onlogische keuze.
Gewijzigd op 11/02/2020 20:44:40 door Michael -
@Michael:
Gewijzigd op 11/02/2020 20:46:24 door Rob Doemaarwat
Toevoeging op 11/02/2020 21:00:44:
Rob Doemaarwat op 11/02/2020 20:44:14:
@Rob, Ja ik was te snel ;-) Ja, dat is zo. Dan zou jouw oplossing iets sneller zijn.