Beste php leden,

De titel zegt al veel maar ik zal wat meer uitleg geven in waarom ik dit wil toepassen. Ik heb een video website waar ik de schema.org video markupschema.org video markup wil implementeren. Google heeft een officiële blogpostofficiële blogpost gepubliceerd dat zegt dat video websites deze markup moeten gebruiken op deze manier zal Google de video's correct kunnen indexeren. Dit is hoe de markup eruitziet bij Youtube:
<div id="watch-container" itemscope itemtype="http://schema.org/VideoObject">
<link itemprop="url" href="http://www.youtube.com/watch?v=dS9SIL4pTWU">;
<meta itemprop="name" content="Le Zap de Spi0n n°139">
<meta itemprop="description" content="http://www.spi0n.com Le 139ième Zap du site ! C&#39;est le zapping du web où vous trouverez une compilation de vidéos étonnantes et insolites qui ont circulé cet...">
<meta itemprop="duration" content="PT10M27S"> (Duration: 10:27 = HH:SS)
<meta itemprop="unlisted" content="False">
<meta itemprop="paid" content="False">
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<link itemprop="url" href="http://www.youtube.com/user/ZapdeSpi0n">;
</span>
<link itemprop="thumbnailUrl" href="http://i1.ytimg.com/vi/dS9SIL4pTWU/hqdefault.jpg">
<span itemprop="thumbnail" itemscope itemtype="http://schema.org/ImageObject">
<link itemprop="url" href="http://i1.ytimg.com/vi/dS9SIL4pTWU/mqdefault.jpg">
<meta itemprop="width" content="320">
<meta itemprop="height" content="180">
</span>
<link itemprop="embedURL" href="http://www.youtube.com/v/dS9SIL4pTWU?version=3&amp;autohide=1">;
<meta itemprop="playerType" content="Flash">
<meta itemprop="width" content="1280">
<meta itemprop="height" content="720">
<meta itemprop="isFamilyFriendly" content="True">


Ik heb alles makkelijk kunnen implementeren omdat alle deze waarden zich al bevinden in mijn database. De lengte van de video bevindt zich ook in de database maar is opgeslagen als een string niet als een integer onder het formaat HH:SS (vb 10:27). Weet er iemand hoe ik $video_duration (HH:SS) kan omzetten naar ISO 8601 date format?

Alvast Bedankt!
Gewoon dit?
<?php
$time = '10:27';
$timeElemetns = explode(':', $duration);
$duration = 'PT'.$timeElements[0].'M'.$timeElements[1].'S';
?>
Het moet zo?
1:23 = T1M23S?
Dan moet dit genoeg zijn
<?php
$duration = 'T' . str_replace(':','M', $video_duration ) . 'S';
?>

Grappig, ik begon met explode maar dacht er hoeft maar 1 ding vervangen te worden. Post het en zie Wouter een explode gebruiken :p
Bedankt voor jullie snelle reactie! Wouter gebruikt in zijn code "P" (time-interval designator). Deze heb ik toegevoegd bij TJVB zijn code en werkt in de meeste gevallen. Doordat de duration is opgeslagen onder HH:SS zal de eerste nul overgedragen worden wanneer dit niet moet. Hieronder enkele vb wanneer deze problemen zich voordoen:

Duration.....Website....Youtube
00:01........PT00M01S...PT0M1S
01:08........PT01M08S...PT1M8S
07:50........PT07M50S...PT7M50S

Is het mogelijk om die eerste nul van HH en SS weg te laten?
Als het 1e teken een 0 is haal je die weg
<?php
if($video_duration[0] == 0)
{
$video_duration =substr($video_duration,1);
}
$duration = 'PT' . str_replace(':','M', $video_duration ) . 'S';
?>
Ik heb de code gebruikt maar het resultaat blijft "PT00M01S". Doe ik iets fout?

<?php
$video_duration= "00:01";
if($video_duration[0] == 0)
{
$video_duration[0] =substr($video_duration,1);
}
$duration = 'PT' . str_replace(':','M', $video_duration ) . 'S';

echo "$duration";
?>
Nee, ik deed iets fout. (en volgens mij moet jij een error krijgen.
$video_duration[0] =substr($video_duration,1);
Moet
$video_duration =substr($video_duration,1);
zijn
Erg bedankt voor de hulp! De code klopt bijna voor de HH haalt die de nul weg bij SS niet. Dit is het resultaat "PT0M01S"
Of je gebruikt een explode en dan:
<?php
$time = '10:27';
$timeElemetns = explode(':', $duration);
$duration = 'PT'.(int) $timeElements[0].'M'.(int) $timeElements[1].'S';
?>
Wouter, bedankt voor de hulp. Ik had uw code ook al geprobeerd maar deze wou niet werken. De lengte van de video is in de database opgeslagen als een string en niet als een integer weet niet of dit de reden is waarom de code niet wil werken.

Ik heb eens gekeken in de php manual substr.php

<?php
$rest = substr("abcdef", 0, -1); // returns "abcde"
$rest = substr("abcdef", 2, -1); // returns "cde"
$rest = substr("abcdef", 4, -4); // returns false
$rest = substr("abcdef", -3, -1); // returns "de"
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
?>

Ik dacht het op deze manier op te lossen maar blijkt dat je alleen opeenvolgende waardes kunt substr. Is dit correct? Is er een manier om die 1ste nul van HH en die 1ste nul van SS te substr?
Ah, dat komt door een typfout van mij.$timeElemetns moet $timeElements zijn op regel 3.

Reageren