wake-up-neo.com

UTC-Datumszeit in lokales Datum umwandeln

Vom Server bekomme ich eine datetime-Variable in diesem Format: 6/29/2011 4:52:48 PM und ist in UTC-Zeit. Ich möchte es mit JavaScript in die aktuelle Browserzeit des Benutzers konvertieren.

Wie geht das mit JavaScript oder jQuery?

254
Amr Elgarhy

Hängen Sie 'UTC' an die Zeichenfolge an, bevor Sie sie in ein Datum in Javascript konvertieren:

var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
313
digitalbath

Server sollten aus meiner Sicht immer eine datetime im standardisierten ISO 8601-Format zurückgeben.

Mehr Infos hier:

In diesem Fall gibt der Server '2011-06-29T16:52:48.000Z' zurück, der direkt in das JS Date-Objekt eingespeist wird.

var utcDate = '2011-06-29T16:52:48.000Z';  // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);

Die localDate wird in der richtigen Ortszeit sein, die in meinem Fall zwei Stunden später wäre (DK-Zeit).

Sie wirklich müssen nicht all dieses Parsing durchführen, was die Sache nur kompliziert macht, solange Sie mit dem von dem Server zu erwartenden Format übereinstimmen.

88
Hulvej

Dies ist eine universelle Lösung:

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);

    var offset = date.getTimezoneOffset() / 60;
    var hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;   
}

Verwendungszweck:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));

Anzeigen des Datums basierend auf der lokalen Einstellung des Clients:

date.toLocaleString();
85
Adorjan Princz

Sie sollten den (UTC) Offset (in Minuten) des Clients erhalten:

var offset = new Date().getTimezoneOffset();

Und dann muss der Korrespondent die Zeit, die Sie vom Server erhalten, hinzufügen oder subtrahieren. 

Hoffe das hilft.

32
Nobita

Setzen Sie diese Funktion in Ihren Kopf:

<script type="text/javascript">
function localize(t)
{
  var d=new Date(t+" UTC");
  document.write(d.toString());
}
</script>

Dann generieren Sie für jedes Datum im Hauptteil Ihrer Seite Folgendes:

<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>

Um GMT und Zeitzone zu entfernen, ändern Sie die folgende Zeile:

document.write(d.toString().replace(/GMT.*/g,""));
19
Ben Bryant

Für mich haben oben genannte Lösungen nicht funktioniert.

Mit IE ist die UTC-Konvertierung von Datum zu Uhrzeit in local wenig kompliziert. Für mich ist das Datum und die Uhrzeit von der Web-API '2018-02-15T05:37:26.007' und ich wollte gemäß der lokalen Zeitzone konvertieren. Daher habe ich den folgenden Code in JavaScript verwendet.

var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
12
PramodB

Nachdem ich ein paar andere hier ohne gute Ergebnisse versucht hatte, schien dies für mich zu funktionieren:

convertUTCDateToLocalDate: function (date) {
    return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(),  date.getHours(), date.getMinutes(), date.getSeconds()));
}

Und das funktioniert umgekehrt, von Local Date zu UTC:

convertLocalDatetoUTCDate: function(date){
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),  date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
10
Uniphonic

Verwenden Sie dies für die UTC- und Ortszeitkonvertierung und umgekehrt.

//Covert datetime by GMT offset 
//If toUTC is true then return UTC time other wise return local time
function convertLocalDateToUTCDate(date, toUTC) {
    date = new Date(date);
    //Local time converted to UTC
    console.log("Time: " + date);
    var localOffset = date.getTimezoneOffset() * 60000;
    var localTime = date.getTime();
    if (toUTC) {
        date = localTime + localOffset;
    } else {
        date = localTime - localOffset;
    }
    date = new Date(date);
    console.log("Converted time: " + date);
    return date;
}
9
user3560410

Wenn Sie nichts dagegen haben ,moment.js zu verwenden, und Ihre Zeit in UTC ist, verwenden Sie einfach Folgendes:

moment.utc('6/29/2011 4:52:48 PM').toDate();

wenn Ihre Zeit nicht in utc, sondern in einem anderen Ihnen bekannten Gebietsschema liegt, verwenden Sie Folgendes:

moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY', 'fr').toDate();

wenn Ihre Zeit bereits lokal ist, verwenden Sie Folgendes:

moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY');
8
adnan kamili

In Matts Antwort fehlt die Tatsache, dass die Sommerzeit zwischen Date () und dem Datum, zu dem es konvertiert werden muss, abweichen kann - hier ist meine Lösung:

    function ConvertUTCTimeToLocalTime(UTCDateString)
    {
        var convertdLocalTime = new Date(UTCDateString);

        var hourOffset = convertdLocalTime.getTimezoneOffset() / 60;

        convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset ); 

        return convertdLocalTime;
    }

Und die Ergebnisse im Debugger:

UTCDateString: "2014-02-26T00:00:00"
convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)
7
MaurGi

Das funktioniert für mich:

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
    return newDate;   
}
7
Molp Burnbright

Dies ist eine vereinfachte Lösung, die auf der Antwort von Adorjan Princ basiert:

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date);
    newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return newDate;
}

Verwendungszweck:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
6
huha

Mir schien die einfachste Verwendung

datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());

(Ich dachte, die erste Zeile könnte ausreichen, aber es gibt Zeitzonen, die in Bruchteilen von Stunden deaktiviert sind.)

4
mizuki nakeshu

Fügen Sie am Ende die Zeitzone hinzu, in diesem Fall 'UTC':

theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));

verwenden Sie anschließend die FunktionsfamilientoLocale () * , um das Datum im richtigen Gebietsschema anzuzeigen 

theDate.toLocaleString();  // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString();  // "9:52:48 AM"
theDate.toLocaleDateString();  // "6/29/2011"
3
pabloa98

YYYY-MM-DD hh:mm:ss-Format verwenden:

var date = new Date('2011-06-29T16:52:48+00:00');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"

Stellen Sie für die Konvertierung aus dem YYYY-MM-DD hh:mm:ss-Format sicher, dass Ihr Datum dem ISO 8601-Format entspricht.

Year: 
    YYYY (eg 1997)    
Year and month: 
    YYYY-MM (eg 1997-07)
Complete date: 
    YYYY-MM-DD (eg 1997-07-16)
Complete date plus hours and minutes:
    YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)    
Complete date plus   hours, minutes and seconds:
    YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)    
Complete date plus hours, minutes, seconds and a decimal fraction of a second
    YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) where:

YYYY = four-digit year
MM   = two-digit month (01=January, etc.)
DD   = two-digit day of month (01 through 31)
hh   = two digits of hour (00 through 23) (am/pm NOT allowed)
mm   = two digits of minute (00 through 59)
ss   = two digits of second (00 through 59)
s    = one or more digits representing a decimal fraction of a second
TZD  = time zone designator (Z or +hh:mm or -hh:mm)

Wichtige Hinweise

  1. Sie müssen Datum und Uhrzeit durch eine T trennen. In einigen Browsern funktioniert ein Leerzeichen nicht
  2. Sie müssen die Zeitzone mit diesem Format einstellen +hh:mm. Eine Zeichenfolge für eine Zeitzone (z. B. 'UTC') wird in vielen Browsern nicht verwendet. +hh:mm steht für den Versatz der UTC-Zeitzone.
3
Gudradain

Eine JSON-Datumszeichenfolge (in C # serialisiert) sieht wie "2015-10-13T18: 58: 17" aus. 

Machen Sie in angle (nach Hulvej) einen localdate-Filter:

myFilters.filter('localdate', function () {
    return function(input) {
        var date = new Date(input + '.000Z');
        return date;
    };
})

Zeigen Sie dann die Ortszeit wie folgt an:

{{order.createDate | localdate | date : 'MMM d, y h:mm a' }}
3
James Howey

Ich beantworte dies, wenn eine Funktion gewünscht wird, die die konvertierte Zeit für ein bestimmtes ID-Element anzeigt und die Datumsformatzeichenfolge yyyy-mm-dd.__ verwendet.

function convertUTCDateToLocalDate(date1, ids) 
{
  var newDate = new Date();
  var ary = date1.split(" ");
  var ary2 = ary[0].split("-");
  var ary1 = ary[1].split(":");
  var month_short = Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
  newDate.setUTCHours(parseInt(ary1[0]));
  newDate.setUTCMinutes(ary1[1]);
  newDate.setUTCSeconds(ary1[2]);
  newDate.setUTCFullYear(ary2[0]);
  newDate.setUTCMonth(ary2[1]);
  newDate.setUTCDate(ary2[2]);
  ids = document.getElementById(ids);
  ids.innerHTML = " " + newDate.getDate() + "-" + month_short[newDate.getMonth() - 1] + "-" + newDate.getFullYear() + " " + newDate.getHours() + ":" + newDate.getMinutes() + ":" + newDate.getSeconds();
            }

ich weiß, dass die Antwort bereits akzeptiert wurde, aber ich bin wegen Google hierhergekommen und habe die Inspiration von der akzeptierten Antwort erhalten. Ich wollte sie also einfach teilen, wenn jemand sie braucht.

2
Nisarg Desai

@Adorojan's Antwort ist fast korrekt. Das Hinzufügen des Offsets ist jedoch nicht korrekt, da der Offsetwert negativ ist, wenn das Datum des Browsers vor GMT liegt und umgekehrt . Nachfolgend ist die Lösung, mit der ich gekommen bin und für mich perfekt funktioniert:

// Input time in UTC
var inputInUtc = "6/29/2011 4:52:48";

var dateInUtc = new Date(Date.parse(inputInUtc+" UTC"));
//Print date in UTC time
document.write("Date in UTC : " + dateInUtc.toISOString()+"<br>");

var dateInLocalTz = convertUtcToLocalTz(dateInUtc);
//Print date in local time
document.write("Date in Local : " + dateInLocalTz.toISOString());

function convertUtcToLocalTz(dateInUtc) {
		//Convert to local timezone
		return new Date(dateInUtc.getTime() - dateInUtc.getTimezoneOffset()*60*1000);
}

1
Joe

Basierend auf der Antwort von @digitalbath wird hier eine kleine Funktion zum Erfassen des UTC-Zeitstempels und zum Anzeigen der Ortszeit in einem bestimmten DOM-Element (unter Verwendung von jQuery für diesen letzten Teil) verwendet:

https://jsfiddle.net/moriz/6ktb4sv8/1/

<div id="eventTimestamp" class="timeStamp">
   </div>
   <script type="text/javascript">
   // Convert UTC timestamp to local time and display in specified DOM element
   function convertAndDisplayUTCtime(date,hour,minutes,elementID) {
    var eventDate = new Date(''+date+' '+hour+':'+minutes+':00 UTC');
    eventDate.toString();
    $('#'+elementID).html(eventDate);
   }
   convertAndDisplayUTCtime('06/03/2015',16,32,'eventTimestamp');
   </script>
1
Moriz

Sie können momentjs verwenden. moment(date).format() gibt immer Ergebnis in lokales Datum

Bonus können Sie auf beliebige Weise formatieren. Für zB 

moment().format('MMMM Do YYYY, h:mm:ss a'); // September 14th 2018, 12:51:03 pm
moment().format('dddd');                    // Friday
moment().format("MMM Do YY"); 

Für weitere Details können Sie sich auf Moment js website beziehen

1
Shivendra Gupta

Für mich funktioniert das gut

if (typeof date === "number") {
  time = new Date(date).toLocaleString();
  } else if (typeof date === "string"){
  time = new Date(`${date} UTC`).toLocaleString();
}
0
C.Lee

Ich habe ein kleines Nizza-Skript geschrieben, das eine UTC-Epoche verwendet und die Zeitzone des Client-Systems konvertiert und im Format d/m/Y H: i: s (wie die Datumsfunktion PHP) zurückgibt:

getTimezoneDate = function ( e ) {

    function p(s) { return (s < 10) ? '0' + s : s; }        

    var t = new Date(0);
    t.setUTCSeconds(e);

    var d = p(t.getDate()), 
        m = p(t.getMonth()+1), 
        Y = p(t.getFullYear()),
        H = p(t.getHours()), 
        i = p(t.getMinutes()), 
        s = p(t.getSeconds());

    d =  [d, m, Y].join('/') + ' ' + [H, i, s].join(':');

    return d;

};
0
John Bell

Sie können dies mit der Datei moment.js erledigen.

Es ist einfach, Sie haben nur den Ort der Zeitzone erwähnt.

Beispiel: Wenn Sie Ihre Datums-/Uhrzeit in die Zeitzone Asia/Kolkata konvertieren möchten, müssen Sie nur den Namen des Zeitzonenorts angeben, der von moment.js erhalten wurde

var UTCDateTime="Your date obtained from UTC";
var ISTleadTime=(moment.tz(UTCDateTime, "Africa/Abidjan")).tz("Asia/Kolkata").format('YYYY-MM-DD LT');
0
REvathY M