我现在用的这个尝试的jQuery的DateTimePicker获取日期和时间数据。 我能够获得大部分的东西出来(格式,显示器等)。 但是,我没能获得UTC格式的日期和时间。 我只能够获得本地格式的日期和时间。
有谁知道如何修改它得到的日期和时间? 或删除掉,在弹出的“现在”按钮?
我现在用的这个尝试的jQuery的DateTimePicker获取日期和时间数据。 我能够获得大部分的东西出来(格式,显示器等)。 但是,我没能获得UTC格式的日期和时间。 我只能够获得本地格式的日期和时间。
有谁知道如何修改它得到的日期和时间? 或删除掉,在弹出的“现在”按钮?
我今天碰到了同样的问题,并发现了这个古老的线程。 您可以覆盖$ .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();
};
没有任何额外的库,你可以使用下面的实用方法来做到以下几点:
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这使得处理日期的轻松了不少赫克。