2010-09-30 10 views

Antwort

17

Ok, so habe ich ein, dass es funktioniert:

/* 
    Note: this requires that the JQuery-DateFormat plugin (available here) be loaded first 
    http://plugins.jquery.com/project/jquery-dateFormat 
*/ 

(function ($) { 
    $.fn.localTimeFromUTC = function (format) { 

     return this.each(function() { 

      // get time offset from browser 
      var currentDate = new Date(); 
      var offset = -(currentDate.getTimezoneOffset()/60); 

      // get provided date 
      var tagText = $(this).html(); 
      var givenDate = new Date(tagText); 

      // apply offset 
      var hours = givenDate.getHours(); 
      hours += offset; 
      givenDate.setHours(hours); 

      // format the date 
      var localDateString = $.format.date(givenDate, format); 
      $(this).html(localDateString); 
     }); 
    }; 
})(jQuery); 

Verbrauch:

<span class="utcdate">2/5/2010 10:30 PM</span> 

    $('.utcdate').localTimeFromUTC('MM/dd/yyyy hh:mm a'); 
+0

ich mit Ihrem Code und jQuery ein paar Dinge ändern musste angezeigt werden soll. Sie können die vollständigen Details auf meinem Blog sehen: [http://emplementation.blogspot.com/2010/11/displaying-timestamps-in-clientsviewers.html](http://emplementation.blogspot.com/2010/11/ displaying-timestamps-in-clientsview.html – docchang

+0

Zeitzonen sind nicht immer auf einer Stunde begrenzt, daher sollten Sie den Offset auf Minuten und nicht auf Stunden anwenden.Zum Beispiel, [Venezuela ist UTC-04: 30] (https://en.wikipedia.org/wiki/UTC%E2%88%9204:30) – jwadsack

0

CodeGrue Vielen Dank für Austausch mit der Gemeinde.

Für diejenigen, die gezwungen sind, mit anderen Zeitzonen als UTC zu arbeiten .. können Sie die Funktion, indem Sie die Zeitdifferenz wie folgt ändern:

Original-Schnipsel:

var offset = -(currentDate.getTimezoneOffset()/60); 

Snippet veränderte, mit zu arbeiten CEST-Zeitzone (Zeitzonen-Offset: UTC + 2 Stunden):

var offset = -(currentDate.getTimezoneOffset()/60 + 2); 

und so weiter.

0

Als ich das gebraucht, I

var hours = givenDate.getHours(); 

zu

var hours = givenDate.getUTCHours(); 

die Linie ändern musste Wenn durch diese debuggen, die Linie var givenDate = new Date(tagText) endet ein Date-Objekt erstellen, die in UTC (wenn Sie geben ein Datum im RFC1123-Format, zB ddd, dd MMM yyyy HH:mm:ss GMT), aber wenn Sie getHours aufrufen, erhalten Sie die Stunden in der lokalen Zeitzone. Wenn Sie also getUTCHours nicht aufrufen, funktioniert es nicht.

So ist die vollständige Sache ist

/* 
    Note: this requires that the JQuery-DateFormat plugin be loaded first 
    http://plugins.jquery.com/project/jquery-dateFormat 
*/ 

(function ($) { 
    $.fn.localTimeFromUTC = function (format) { 

     return this.each(function() { 

      // get time offset from browser 
      var currentDate = new Date(); 
      var offset = -(currentDate.getTimezoneOffset()/60); 

      // get provided date 
      var tagText = $(this).html(); 
      var givenDate = new Date(tagText); 

      // apply offset 
      var hours = givenDate.getUTCHours(); 
      hours += offset; 
      givenDate.setHours(hours); 

      // format the date 
      var localDateString = $.format.date(givenDate, format); 
      $(this).html(localDateString); 
     }); 
    }; 
})(jQuery); 

Siehe this other question, wie habe ich es in Kombination mit dem timeago Plugin.

+0

eigentlich brauchen Sie die getHours und nicht getUtcHour, die das tun werden shift, weil dein Datum bereits in utc ist (das Ziel ist es, lokal anzuzeigen), also funktioniert die erste Version, aber nicht deine – tahir

7

Verwenden Sie das Eingabedatum, um den Zeitzonen-Offset zu finden. Wichtig für Sommerzeitänderungen.

(function ($) { 
$.fn.localTimeFromUTC = function (format) { 
    return this.each(function() { 

     // get provided date 
     var tagText = $(this).html(); 
     var givenDate = new Date(tagText); 

     if(givenDate == 'NaN') return; 

     // get time offset from browser 
     var offset = -(givenDate.getTimezoneOffset()/60); 

     // apply offset 
     var hours = givenDate.getHours(); 
     hours += offset; 
     givenDate.setHours(hours); 

     // format the date 
     var localDateString = $.format.date(givenDate, format); 
     $(this).html(localDateString); 


    }); 
}; 
})(jQuery); 

Verwenden Sie es wie ....

function ConvertDatesToLocalTime() { 
     $('.ConvertUtcToLocal').localTimeFromUTC('MM/dd/yyyy hh:mm:ss a'); 
    } 

    $(document).ready(function() { 
     ConvertDatesToLocalTime(); 

    }); 

Assign 'ConvertUtcToLocal' Klasse für alle Umwandlung erfordert Elemente.

+0

Ausarbeitung der Sommerzeit-Referenz, wenn die umgewandelte UTC von einem Datum in DST und heute stammt ist nicht in der Sommerzeit, wenn Sie Ihren Offset auf das heutige Datum setzen, wird eine Zeit zurückgegeben, die um eine Stunde abgelaufen ist. –

+0

Es heißt "Kann nicht lesen 'Datum' von undefined" in Zeile $ .format.date (dateDate, Format) ;. vermisse ich etwas? – Dashrath

+0

Ich löste das Problem, indem ich jquery-dateFormat.js auf der Seite von https://github.com/phstc/jquery-dateFormat einfügte – Dashrath

1
$(".localdatetime").each(function() { 
     var datestr = $(this).text(); 
     //alert(datestr); 
     if (datestr.trim() != '') { 
      var dateOb = (new Date(Date.parse(datestr, 'MM-dd-yyyy HH:mm'))).setTimezone("GMT").toString('dd MMM yyyy hh:mm tt'); 
      //alert(dateOb); 
      $(this).text(dateOb); 
     } 
    }) 

dies kann auch zusammen mit Date.js Bibliothek verwendet werden, um Zeit in Benutzerzeitzone

Verwandte Themen