如何获取jQuery中的DateTimePicker UTC时间(How to obtain utc

2019-09-21 05:43发布

我现在用的这个尝试的jQuery的DateTimePicker获取日期和时间数据。 我能够获得大部分的东西出来(格式,显示器等)。 但是,我没能获得UTC格式的日期和时间。 我只能够获得本地格式的日期和时间。

有谁知道如何修改它得到的日期和时间? 或删除掉,在弹出的“现在”按钮?

Answer 1:

我今天碰到了同样的问题,并发现了这个古老的线程。 您可以覆盖$ .datepicker._gotoToday使用UTC时间,当你点击“立即”按钮。

//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();
};


Answer 2:

没有任何额外的库,你可以使用下面的实用方法来做到以下几点:

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());
}

以下是这之前和之后UTC时间模拟区的几个例子:

 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" 

但答案将是不完整不提moment.js这使得处理日期的轻松了不少赫克。



文章来源: How to obtain utc time in jQuery datetimepicker