2017-05-09 6 views
0

Ich versuche eine vom Benutzer eingegebene Zeit von Ortszeit in GMT + 1 mit MomentJS Timezone zu konvertieren, jedoch habe ich diese Bibliothek noch nie benutzt und die Dokumentation verwirrt mich eher.MomentJS Zeitzone - Lokale Eingabezeit für GMT + 2

Meine Form verwendet Bootstrap Datumsauswahl und Bootstrap Timepicker eine Benutzeroberfläche zur Eingabe von Datum und Uhrzeit eines Ereignisses zu erstellen, wie folgt aus:

<label>Date:</label> 
    <input type="text" id="dteDay"> 
    <input type="hidden" id="iptDate"> 
    <label>Time (GMT+1 only):</label> 
    <input id="iptTime" type="text"> 

    <script> 
    $("#dteDay").datepicker({ 
     format: "dd/mm/yyyy", 
     todayBtn: "linked", 
     todayHighlight: true, 
     startDate: "-2d", 
     endDate: "+0d", 
    }); 


    $('#iptTime').timepicker({ 
     minuteStep: 5, 
     showMeridian: false 
    }); 
    </script> 

Dann habe ich diese Funktion verwenden, das Datum und die Zeit zu sammeln, um zu senden eine PHP-Datei, etwa so:

function CreateReport(){   
     if($("#sltMyName").select2("val") == null){ 
      ShowError("Please Enter Your Name!"); 
     } 
     else if($("#sltTheirName").select2("val") == null){ 
      ShowError("Please Enter Their Name!"); 
     } 
     else if($("#dteDay").val() == ""){ 
      ShowError("Please Enter the Date of Incident!"); 
     } 
     else if($("#iptTime").val() == ""){ 
      ShowError("Please Enter the Time of Incident!"); 
     } 
     else if($("#txtStory").val() == ""){ 
      ShowError("Please Enter the Full Story!"); 
     } 
     else if($("#txtEvidence").val() == ""){ 
      ShowError("Please List your Evidence"); 
     } 
     else{ 
      if($("#sltOffence").val() == "Other" && $("#iptOtherOffence").val() == ""){ 
       ShowError("Please Enter Offence"); 
      } 
      else if($("#sltOffence").val() == "Other"){ 
       var Offence = $("#iptOtherOffence").val(); 
      } 
      else{ 
       var Offence = $("#sltOffence").val(); 
      } 
      $.post(
       'includes/complaint/index.php', 
       { 
        Server: $("#sltServerRegion").val(), 
        MyName: JSON.stringify($("#sltMyName").select2("val")), 
        TheirName: JSON.stringify($("#sltTheirName").select2("val")), 
        Date: $("#dteDay").val(), 
        Time: $("#iptTime").val(), 
        Offence: Offence, 
        Story: $("#txtStory").val(), 
        Evidence: $("#txtEvidence").val(), 
        RefundAmount: $("#iptRefundAmount").val(), 
        RefundPreference: $("#sltRefundPreference").val() 
       }, 
       function(data){ 
        returnValue = JSON.parse(data); 
        if(returnValue["data"] == 1){ 
         window.location.href = returnValue["url"]; 
        } 
        else{ 
         ShowError(returnValue["msg"]); 
        } 
       } 
      ); 
     } 
    } 

Was ich tun muß, ist die eingegebene Zeit in GMT + 1 (oder vorzugsweise GMT + 2 im Sommer) ändern Sie die Zeit, um unser anderes System verwendet entsprechen.

ich mit MomentJS Zeitzone verstehen können Sie ein Datum für bestimmte Zeitzone drehen, etwa so:

var newYork = moment.tz("2014-06-01 12:00", "America/New_York"); 
newYork.format(); // 2014-06-01T12:00:00-04:00 

Obwohl ich das verstehe nicht viel. Es konvertiert es von was (dh GMT + 1) zu New_York?

Kurz gesagt, wie konvertiere ich eine vom Benutzer eingegebene Zeit von Ortszeit in GMT + 1 (oder im Sommer GMT + 2, wenn möglich), dann teilen Sie sie gegen die AJAX-Funktion?

Vielen Dank im Voraus.

+0

Was meinst du mit "oder im Sommer GMT + 2 wenn möglich"? – quirimmo

+0

Wenn die Uhren eine Stunde weitergehen, wenn wir von GMT + 1 zu GMT + 2 wechseln. –

+0

Diese Änderung ist implizit. Wenn die Uhren eine Stunde vorrücken, gehen sie in der ganzen Welt voran. Wenn Sie also ein aktuelles Datum mit einer Zeitzone abrufen und es in eine andere Zeitzone konvertieren, bringen sie diese Änderung bereits zurück – quirimmo

Antwort

1

, um von lokalen zu konvertieren Zeit bis zu einem festen UTC-Offset benötigen Sie das Moment-Timezone-Add-On überhaupt nicht. Sie können dies mit Moment.js selbst tun. Zum Beispiel:

var m = moment("2017-01-01 00:00:00"); // input is local time 
m.utcOffset('+01:00');     // convert to UTC+1 
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output string 

Aber da man für die Umwandlung von Ortszeit in eine Zeitzone, die zwischen UTC + 1 und UTC + 2 für die Sommerzeit schaltet gefragt, dann müssen Sie in der Tat Zeit-Zeitzone verwenden. Aber zuerst müssen Sie die richtige Zeitzone für Ihr Ziel auswählen - nicht jede Zeitzone, die zwischen +1 und +2 wechselt, am selben Tag oder zur gleichen Tageszeit. Wählen Sie nicht zufällig eine aus. Eine Liste von ihnen kann here gefunden werden.

Eine solche Zeitzone wäre Europe/Paris, die Vorschriften der Europäischen Union für DST verwendet von UTC + 1 (MEZ) zu UTC + 2 schalten (CEST)

var m = moment("2017-01-01 00:00:00"); // input is local time 
m.tz('Europe/Paris');      // convert to UTC+1 
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output string 

Auch in Ihrer Frage, werden Sie gefragt Woraus das Beispiel konvertiert wurde. Es wurde überhaupt nicht konvertiert - es wurde die Eingabe als America/New_York Zeit behandelt.Da Sie zur Ortszeit starten möchten, würden Sie moment.tz(...) nicht verwenden, um einen Moment zu konstruieren, stattdessen würden Sie .tz(...) für einen vorhandenen lokalen Moment verwenden.

Noch eine Sache - eine andere Antwort schlug vor, die Standardzeitzone zu ändern. Das wird dein Problem nicht lösen. In der Tat verhindert es, dass Sie das erreichen, was Sie beschrieben haben - denn dann wird Ihre gesamte Eingabe als Zeit in dieser Zeitzone und nicht als lokale Zeitzone des Computers des Benutzers behandelt.

0

Es ändert die angegebene Datum Uhrzeit 2014-06-01 12:00 von der Standardzeitzone in der Welt (GMT), zu der bereitgestellten. Sie können auch Ihre Standard eine Verwendung ändern:

moment.tz.setDefault("America/New_York"); 

Dies ist die Liste der Standard-Zeitzonen Sie als Strings in Moment Zeitzone verwenden:

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Sie auch Zeit und die können UTCOFFSET Verfahren statt:

http://momentjs.com/docs/#/manipulating/utc-offset/

+0

Wie kann ich den Standard auf die lokale Zeit einstellen und dann die lokale Zeit auf GMT + 1 einstellen? –

+1

'moment.tz.setDefault (" Afrika/Brazzaville ");' sollte den Trick machen – quirimmo

+0

Yeh, das schaltet die Zeit von GMT zu GMT + 2, aber wie kann ich die Zeitzone von GMT + 2 wechseln? Wie ich lokale Zeit (für jeden Benutzer) tun möchte -> GMT + 2 und nicht GMT -> GMT + 2. –

Verwandte Themen