我听说 jQuery datetimepicker 有一些时区更新,因此您可能需要先检查该站点,但是这是我为获取 UTC 格式的选定日期和时间所做的。
首先创建 datetimepicker 并使用城市而不是 +0500 GMT,因为如果您使用 GMT 偏移量,您必须考虑夏令时 - 这是一场噩梦。
// create ye datetimepicker with timezone options
$('#datetimepicker').datetimepicker({
showTimezone: true,
onSelect: onSelect,
timezoneList: [
{ value: 'America/New_York', label: 'New York'},
{ value: 'America/Chicago', label: 'Chicago' } ,
{ value: 'America/Denver', label: 'Denver' },
{ value: 'America/Los_Angeles', label: 'Los Angeles' }
]);
接下来,从Github 上的 mde获取 timezoneJS.Date 库(注意:您还需要为您的地区下载适当的时区文件,只需按照 README 说明进行操作)
现在,当用户选择日期时,会调用 onSelect 方法。
function onSelect(dateText, dateInst) {
// get the date without the timezone data
var d = $('#datetimepicker').datepicker('getDate');
// init timezoneJS
timezoneJs.timezone.zoneFileBasePath = '/tz';
timezoneJs.timezone.init();
// get the selected timezone
var tz = $('#datetimepicker').data('datepicker').settings.timepicker.timezone
// construct the utcDate with the help of the timezoneJS.Date lib
var utcDate = new timezoneJS.Date(
d.getFullYear(),
d.getMonth(),
d.getDate(),
d.getHours(),
d.getMinutes(),
tz)
var utcLinuxTimestamp = utcDate.getTime() / 1000
}
并非完全无痛,但它会为您处理夏令时。
使用 UTC 时间戳中的日期和时区填充 datetimepicker 的反面如下所示:
// init timezone JS
timezoneJs.timezone.zoneFileBasePath = '/tz';
timezoneJs.timezone.init();
// get timezone date JS object
var tz = 'America/New York';
var d = new timezoneJS.Date( timestamp * 1000, tz);
$('#datetimepicker').datetimepicker({
showTimezone: true,
timezoneList: [
{ value: 'America/New_York', label: 'New York'},
{ value: 'America/Chicago', label: 'Chicago' } ,
{ value: 'America/Denver', label: 'Denver' },
{ value: 'America/Los_Angeles', label: 'Los Angeles' }
],
timezone: tz,
defaultDate: d._dateProxy,
onSelect: onSelect
}).datepicker('setDate',d._dateProxy);
我不确定您是否需要最后一行的 setDate 部分,但不会受到伤害。