Twitter returns the "created_time" as something like this: Thu May 01 13:57:04 +0000 2014, which is shown as "Invalid Date" in IE.
//created_time = Thu May 01 13:57:04 +0000 2014
var date = new Date( jsonData.created_time );
console.log( date.toString() );
// = IE 9 & 10: 'Invalid Date'
// = Chrome: 'Mon May 05 2014 14:50:00 GMT-0400 (Eastern Daylight Time)'
// = FireFox: 'Mon May 05 2014 14:50:00 GMT-0400 (Eastern Standard Time)'
// = Safari: 'Mon May 05 2014 14:50:00 GMT-0400 (Eastern Daylight Time)'
For Facebook, the 'created_time' value is something like: 2014-04-17T12:59:04+0000, which is shown as "Invalid Date" in IE and Safari.
//created_time = 2014-04-17T12:59:04+0000
var date = new Date( jsonData.created_time );
console.log( date.toString() );
// = IE 9 & 10: 'Invalid Date'
// = Chrome: 'Thu Apr 17 2014 08:59:04 GMT-0400 (Eastern Daylight Time)'
// = FireFox: 'Thu Apr 17 2014 08:59:04 GMT-0400 (Eastern Standard Time)'
// = Safari: 'Invalid Date'
So, what fixed the problem, for now, was to do a little manipulation on the date string before it is passed it to the Date() constructor.
//twitter = 'Thu May 01 13:57:04 +0000 2014'
//facebook = '2014-04-17T12:59:04+0000'
var created = facebook.created_time;
if( isFacebook )
{
//this fixes the issue in IE and Safari, and still works in Firefox and Chrome even though they don't need it.
created = created.replace(/-/g, '/').replace(/T/, ' ').replace(/\+/, ' +');
}
else if( isTwitter )
{
//this is only an issue in IE, so we can just do a quick test and fix the issue.
if( navigator.userAgent.match(/MSIE\s([^;]*)/) )
created = created .replace(/( \+)/, ' UTC$1');
}
var date = new Date( created );
No comments:
Post a Comment