Link to home
Start Free TrialLog in
Avatar of SashaIsaac
SashaIsaac

asked on

Formatting time in an RSS feed

I am creating a custom RSS feed using the <dc:date> field to display event dates. The dates and times are split up in the database and I am having troubles getting them to display properly  in the feed. The StartDate is fine - I just need to add the vcalStartTime field so the time shows up. Or have no time at all show up.

I think I need to somehow use the $newdate2 value (see code snippet) but when I add it to my $date I get the issue where all dates and times are set to Dec 31 1969 (so its wrong). If I remove the time value from the date() I still get a 5:00 AM time on everything.

Any suggestions are appreciated!
Thanks!

$newdate2 = $feed['StartDate'] . T . $feed['vcalStartTime'] .Z  ;
 
 
$date = explode("-", $feed['StartDate']); 
list($year, $month, $day) = $date;
echo "<dc:date>" . date("D, j M Y H:i:s T", strtotime("$month/$day/$year")) ."</dc:date>\n";

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Ray Paseur
Ray Paseur
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of SashaIsaac
SashaIsaac

ASKER

I think I was missing the use of date('r) - I checked some of the resources you linked to as well. Now I have my date and time almost correct - just off by 1 hour. I am trying to add that hour and then I will post the final solutions.

Thanks for that help! Much appreciated.
Although I think I need to check my formatting of my date somewhere - when I go to validate it says dc:date needs to be the W3CDTF format (which I believe is ISO8601 too). So I'll check into why that is not in that format. Thanks!
Yes, the W3CDTF is ISO8601-compliant.  I think that is PHP date('c');  That is different from the RSS standard for pubDate.

One possibility if the time is off by an hour is that your serer is in a different timezone.  That happens to me.  I am in Washington, DC and my servers are in Chicago.
An ISO 8601 DATETIME with an added hour...
date('c', strtotime($iso_date . ' + 1 hour'));

Open in new window

I hadn't added the 'c' to the other line in my code:

echo "<dc:date>" . date("D, j M Y H:i:s T", strtotime("$month/$day/$year")) ."</dc:date>\n";


I am including the solution - thanks again for the assistance!
$iso_date = $feed['StartDate'] . T . $feed['vcalStartTime'] ;
$newdate3 = date('c',strtotime($iso_date . '+ 1 hour' ));	
 
//in the channel/item		
 
echo "<dc:date>" . date("c", strtotime("$newdate3")) ."</dc:date>\n";

Open in new window

Just a thought, ... $newdate3 is already in date('c') format so you do not need to use strtotime() and re-convert it.

Thanks for the points - it's a great question, ~Ray
$iso_date = $feed['StartDate'] . T . $feed['vcalStartTime'] ;
$newdate3 = date('c',strtotime($iso_date . '+ 1 hour' ));       
 
//in the channel/item           
 
echo "<dc:date>$newdate3</dc:date>\n";

Open in new window