Montag, Juni 1, 2020

So erhalten Sie utc-Zeit in jQuery datetimepicker

Ich bin mit dem Versuch, diesen jQuery datetimepicker zu erhalten Datum und Uhrzeit-Daten.
Ich bin in der Lage, die meisten der Dinge (format, Anzeige, etc). Aber ich war nicht in der Lage, das Datum und die Uhrzeit im UTC-format. Ich bin nur in der Lage, um das Datum und Zeit im lokalen format.

Weiß jemand, wie es zu ändern um das Datum und die Uhrzeit?
oder entfernen Sie aus der „Jetzt“ – button in dem popup?

InformationsquelleAutor user1599647 | 2012-08-15

2 Kommentare

  1. 4

    Ich lief in das gleiche Problem heute, und fand diesen alten thread. Sie können überschreiben $.datepicker._gotoToday zu verwenden UTC-Zeit, wenn Sie auf die „jetzt“ – button.

    //make the now button go to "now" in utc, not local
    $.datepicker._gotoToday = function(id) {
      var inst = this._getInst($(id)[0]),
          $dp = inst.dpDiv;
      this._base_gotoToday(id);
      var tp_inst = this._get(inst, 'timepicker');
      //removed -> selectLocalTimeZone(tp_inst);
      var now = new Date();
      var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
      this._setTime(inst, now_utc);
      $('.ui-datepicker-today', $dp).click();
    };
    • Dies stellt nur die Uhrzeit in UTC, wird das Datum bleibt lokal. Also, wenn Ihr Gebietsschema ist auf den 1. des Monats und UTC ist auf der 2. dann der „jetzt“ – button wird immer noch die 1. als Datum.
  2. 1

    Ohne extra libs können Sie mit dem Dienstprogramm folgenden Methoden, um Folgendes zu tun:

    var dateFromPicker = getDateFromPicker();
    var dateUtc = localAsUtc(dateFromPicker);
    var iso = dateUtc.toISOString(); //returns "2016-12-06T00:00:00.000Z"
    /**
     * <b>WARNING</b>: This method should only be used in conjunction with components that handle local dates (i.e. date pickers).
     *
     * Returns a local date constructed from a UTC date (shifts the time by the local time zone). E.g.:
     * <ul><li>2016-01-01T00:00Z (UTC) -> 2016-01-01T00:00-0100 (CVT)
     *     <li>2016-01-01T00:00Z (UTC) -> 2016-01-01T00:00+0100 (CET)
     * </ul>
     * @param date a date in UTC time zone
     * @returns {Date} the same date & time in the local time zone
     */
    function utcAsLocal(date) {
        if (isNotValidDate(date)) {
            return null;
        }
    
        return new Date(
            date.getUTCFullYear(),
            date.getUTCMonth(),
            date.getUTCDate(),
            date.getUTCHours(),
            date.getUTCMinutes(),
            date.getUTCSeconds(),
            date.getUTCMilliseconds()
        );
    }
    
    /**
     * <b>WARNING</b>: This method should only be used in conjunction with components that handle local dates (i.e. date pickers).
     *
     * Returns a UTC date constructed from a local date (shifts the time by the local time zone). E.g.:
     * <ul><li>2016-01-01T00:00-0100 (CVT) -> 2016-01-01T00:00Z (UTC)
     *     <li>2016-01-01T00:00+0100 (GMT) -> 2016-01-01T00:00Z (UTC)
     * </ul>
     * @param date a date in UTC time zone
     * @returns {Date} the same date & time in the UTC time zone
     */
    function localAsUtc(date) {
        if (isNotValidDate(date)) {
            return null;
        }
    
        return new Date(Date.UTC(
            date.getFullYear(),
            date.getMonth(),
            date.getDate(),
            date.getHours(),
            date.getMinutes(),
            date.getSeconds(),
            date.getMilliseconds()
        ));
    }
    
    function isValidDate (date) {
        return !isNotValidDate(date);
    }
    
    function isNotValidDate(date) {
        return date == null || isNaN(date.getTime());
    }

    Hier sind ein paar Beispiele, die simulieren, Zeitzonen vor und nach UTC:

    JS:

    var date;
    
    //simulate a datepicker in (CET)
    date = new Date("2016-12-06T00:00:00.000+0100");
    date.toISOString(); //"2016-12-05T23:00:00.000Z"
    date = localAsUtc(date);
    date.toISOString(); //"2016-12-06T00:00:00.000Z" sent to server
    
    //simulate a datepicker in (CVT)
    date = new Date("2016-12-06T00:00:00.000-0100");
    date.toISOString(); //"2016-12-06T01:00:00.000Z"
    date = localAsUtc(date);
    date.toISOString(); //"2016-12-06T00:00:00.000Z" sent to server
    
    //setting the datepicker date (CET)
    date = new Date("2016-12-06T00:00:00.000Z"); //received from server
    date.toISOString(); //"2016-12-06T00:00:00.000Z"
    date = utcAsLocal(date); //set datepicker with this date shows (06/12/2016)
    date.toISOString(); //"2016-12-05T23:00:00.000Z"
    
    //setting the datepicker date (CVT)
    date = new Date("2016-12-06T00:00:00.000Z"); //received from server
    date.toISOString(); //"2016-12-06T00:00:00.000Z"
    date = utcAsLocal(date); //set datepicker with this date shows (06/12/2016)
    date.toISOString(); //"2016-12-06T01:00:00.000Z"

    aber die Antwort wäre nicht vollständig ohne die Erwähnung der moment.js macht das handling Daten eine verdammt viel einfacher.

Kostenlose Online-Tests