547 Stimmen

UTC-Datumszeit in lokale Datumszeit umrechnen

Vom Server erhalte ich eine Datetime-Variable in diesem Format: 6/29/2011 4:52:48 PM und es ist in UTC-Zeit. Ich möchte sie mit JavaScript in die Zeitzone des Browsers des aktuellen Benutzers umwandeln.

Wie lässt sich dies mit JavaScript oder jQuery bewerkstelligen?

0voto

Suvesh Punkte 11

UTC zu lokal zu ISO - Antwort von Molp Burnbright

da der Server nur ISO-Datumszeiten akzeptiert, habe ich UTC in meine lokale Zeitzone umgewandelt und sie im ISO-Format an den Server gesendet

dies irgendwo zu deklarieren

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

und führen Sie Folgendes aus, wenn Sie die lokale Datumszeit im ISO-Format benötigen convertUTCDateToLocalDate(date).toISOString()

0voto

Rohit Parte Punkte 2505

Ich habe eine Funktion erstellt, die alle Zeitzonen in Ortszeit umrechnet.

Ich habe getTimezoneOffset() nicht verwendet, da es keinen richtigen Offset-Wert zurückgibt

Anforderungen:

1. npm i moment-timezone

function utcToLocal(utcdateTime, tz) {
    var zone = moment.tz(tz).format("Z") // Actual zone value e:g +5:30
    var zoneValue = zone.replace(/[^0-9: ]/g, "") // Zone value without + - chars
    var operator = zone && zone.split("") && zone.split("")[0] === "-" ? "-" : "+" // operator for addition subtraction
    var localDateTime
    var hours = zoneValue.split(":")[0]
    var minutes = zoneValue.split(":")[1]
    if (operator === "-") {
        localDateTime = moment(utcdateTime).subtract(hours, "hours").subtract(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else if (operator) {
        localDateTime = moment(utcdateTime).add(hours, "hours").add(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else {
        localDateTime = "Invalid Timezone Operator"
    }
    return localDateTime
}

utcToLocal("2019-11-14 07:15:37", "Asia/Kolkata")

//Returns "2019-11-14 12:45:37"

0voto

John Bell Punkte 2330

Ich habe ein nettes kleines Skript geschrieben, das eine UTC-Epoche nimmt, sie in die Zeitzone des Client-Systems umwandelt und sie im Format d/m/Y H:i:s (wie die PHP-Datumsfunktion) 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;

};

0voto

Post Impatica Punkte 12869

In Angular habe ich Bens Antwort auf diese Weise verwendet:

$scope.convert = function (thedate) {
    var tempstr = thedate.toString();
    var newstr = tempstr.toString().replace(/GMT.*/g, "");
    newstr = newstr + " UTC";
    return new Date(newstr);
};

Bearbeiten: Angular 1.3.0 hinzugefügt UTC-Unterstützung für Datum Filter, ich habe es noch nicht verwenden, aber es sollte einfacher sein, hier ist das Format:

{{ date_expression | date : format : timezone}}

Angular 1.4.3 Datum-API

-1voto

jefelewis Punkte 1530

Für die TypeScript-Benutzer gibt es eine Hilfsfunktion:

// Typescript Type: Date Options
interface DateOptions {
  day: 'numeric' | 'short' | 'long',
  month: 'numeric',
  year: 'numeric',
  timeZone: 'UTC',
};

// Helper Function: Convert UTC Date To Local Date
export const convertUTCDateToLocalDate = (date: Date) => {
  // Date Options
  const dateOptions: DateOptions = {
    day: 'numeric',
    month: 'numeric',
    year: 'numeric',
    timeZone: 'UTC',
  };

  // Formatted Date (4/20/2020)
  const formattedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000).toLocaleString('en-US', dateOptions);
  return formattedDate;
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X