Hello!

After I wrote this to the Twitter-support, I was encouraged to share
my finding here in this mailing-list.

During the last two weeks, I was designing a website where I
integrated your Twitter profile-widget.

I've changed a few parts of the design - and discovered the option to
show the Tweet-time "absolute" (something like Saturday, 07-16-2011
1:00 pm) instead of relative (like 5 minutes ago).

When I activated the option, I saw that Internet Explorer (Versions 7,
8 and 9) cannot show the tweets anymore.
I guess you have discovered this error yet, so you didn't describe the
option "dateformat" at the help-sites.

After many hours, I was able to identify the reason why IE cannot show
the absolute time.
Here your original code from "widget.js":

var absoluteTime = function(s) {
      var d = new Date(s);
      if (browser.ie) {
        d = Date.parse(s.replace(/( \+)/, ' UTC$1'));
      }
      var ampm = '';
      var hour = function() {
        var h = d.getHours();
        if (h > 0 && h < 13) {
          ampm = 'am';
          return h;
        }
        else if (h < 1) {
          ampm = 'am';
          return 12;
        }
        else {
          ampm = 'pm';
          return h - 12;
        }
      }();
      var minutes = d.getMinutes();
      var seconds = d.getSeconds();
      function getRest() {
        var today = new Date();
        if (today.getDate() != d.getDate() || today.getYear() !=
d.getYear() || today.getMonth() != d.getMonth()) {
          return ' - ' + months[d.getMonth()] + ' ' + d.getDate() + ',
' + d.getFullYear();
        }
        else {
          return '';
        }
      }
      return hour + ':' + minutes + ampm + getRest();
    };

In the forth line "d = Date.parse(s.replace(/( \+)/, ' UTC$1'));" the
time is converted in "milliseconds since 01-01-1970 UTC". The function
"getHours" in IE cannot interpret this time-format.
So you've got to insert after this line: "var d = new Date(d);"
Time is now converted in a format, that the IE-version of "getHours"
can understand.

The new code looks like this:


var absoluteTime = function(s) {
      var d = new Date(s);
      if (browser.ie) {
        var d = Date.parse(s.replace(/( \+)/," UTC$1"));
        var d = new Date(d);                    // here I've inserted the new 
line!
      }
      var ampm = '';
      var hour = function() {
        var h = d.getHours();
        if (h > 0 && h < 13) {
          ampm = 'am';
          return h;
        }
        .....


You don't have to change anything anywhere else in the javascript! The
function for showing the relative time works by calculating the time-
differences - without getHours, getMinutes etc.

Now, every browser, including IE 7, 8 and 9, can show the tweets in
the profile-widget with absolute time!

I recommend to integrate the option "dateformat" in your "webform"
which creates the profile widget.
The other widgets could be improved the same way, as I guess they use
the same javascript.

I hope I could help you improving the Twitter-widget!
If my changes are used, it would be nice if you could insert something
like "//thanks to Stephan Schorn" in the javascript after the line I
changed (If you are allowed to do this). It would be great If my name
was somewhere in the sourcecode of Twitter-widgets ;-)

Best wishes,

Stephan Schorn

PS: I'm from Germany, please appologize if I made a linguistic mistake
here or there :-)

-- 
Have you visited the Developer Discussions feature on 
https://dev.twitter.com/discussions yet?

Twitter developer links:
Documentation and resources: https://dev.twitter.com/docs
API updates via Twitter: https://twitter.com/twitterapi

Unsubscribe or change your group membership settings: 
http://groups.google.com/group/twitter-development-talk/subscribe

Reply via email to