我有一个由用户手动设置的JavaScript Date对象。问题是当在客户端上创建日期时,Date构造函数根据客户端时区构建日期对象。
例如,我住在CST时区,但如果我将我的PC设置为EST时间,那么Date构造函数将构造一个不同的日期对象。
问题是:
如何将日期对象转换为特定时区?例如。客户端机器是EST时间,我需要将日期对象转换为CST时间。
更新
这是我现在的JS
// returns local time in msecs given a UTC offset
Date.prototype.getLocalTime = function(offset) {
var MSEC_HOUR = 3600000; // milliseconds in an hour
var MSEC_MIN = 60000; // milliseconds in a minute
// convert client sides local time
var utc = this.getTime() + (this.getTimezoneOffset() * MSEC_MIN);
return utc + (offset * MSEC_HOUR);
};
var offset = -6.0; // Central Standard Time UTC offset
var date = form.getDate(); // get user date input
var msecs = date.getLocalTime(offset);
// converted clients form date input to CST
var convertedDate = new Date(msecs);
答案 0 :(得分:0)
时区永远是一件棘手的事情。您可以使用返回通用时间的getUTCHours()
,然后从那里开始,也可以使用像momentjs这样的东西。
答案 1 :(得分:0)
如果您想使用某个时区,您可能希望确定UTC,看看它是如何为此目的而制定的,而不是任何其他时区
Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
自UTC开始以来,将返回数毫秒,然后可以通过管道输入
var date = new Date(Date.UTC(year, month, day, hour, min);
答案 2 :(得分:0)
可以使用 moment.js
来完成ConvertDate : function (dateTemp, timeZone) {
//dateTemp(String) -> 2016-09-12 15:00:00.0 (UTC date)
//timezone(String) -> -08:00
var tempNow = moment(dateTemp);
//create moment in current timeZone (without change in date)
//offset -> 330 (IST)
var dateToTimezone = tempNow.clone();
dateToTimezone.utcOffset('UTC');
//convert moment in UTC
//offset -> 0
dateToTimezone.add(tempNow.utcOffset() -dateToTimezone.utcOffset(), 'minutes');
var revertTime = moment(dateToTimezone);
//converted to user selected timeZone
revertTime.utcOffset(timeZone);
var dateToTimezone = revertTime.format();
//converted to other timeZone
return dateToTimezone;
}
<强>输出强>
1)到-08:00偏移
2016-09-12 15:00:00.0 - &gt; 2016-09-12T07:00:00-08:00
2)至-02:00偏移
2016-09-12 15:00:00.0 - &gt; 2016-09-12T13:00:00-02:00