我有一个 nodejs
应用程序,托管在 IST
时区服务器中。该应用程序具有接受用户的时区(太平洋夏令时)的配置。因此,根据用户时区,我需要向他显示数据。但是当我为服务器中的特定用户获取时区以检索服务器中的一些统计数据时,即使获取了正确的时区它仍然返回Date() > 与服务器相关,而不是根据用户首选的时区。下面是下面的代码片段:
var offset=-8; //(Pacific Daylight Time)
var d = new Date( new Date().getTime() + offset * 3600 * 1000);
上面的var d
仍然会捕获服务器时区,并根据服务器时区
获取数据。 如何在服务器中获取与客户端
时区首选项相关的日期
?
最佳答案
如果您已在服务器中存储了用户的首选时区偏移量,则您可以根据任何系统的当前系统时间创建该时区的日期和时间。
Date 的内部时间值为 UTC,因此对于任何 Date,您可以通过偏移量调整时间值,然后使用 UTC 方法以所需的格式输出所需的值并附加时区。
但是,始终使用 UTC 并让主机系统根据系统设置生成日期值要简单得多。
/* Given a Date, return an ISO 8601 formatted date and time string
** for a particular time zone.
** @param {number} offset - offset in minutes +east, -west
** @param {Date} d - date to use, default is now
** @returns {string} ISO 8601 formatted string for supplied time zone offset
*/
function dateForTimezone(offset, d) {
// Copy date if supplied or use current
d = d? new Date(+d) : new Date();
// Use supplied offset or system
offset = offset || -d.getTimezoneOffset();
// Prepare offset values
var offSign = offset < 0? '-' : '+';
offset = Math.abs(offset);
var offHours = ('0' + (offset/60 | 0)).slice(-2);
var offMins = ('0' + (offset % 60)).slice(-2);
// Apply offset to d
d.setUTCMinutes(d.getUTCMinutes() - offset);
// Return formatted string
return d.getUTCFullYear() +
'-' + ('0' + (d.getUTCMonth()+1)).slice(-2) +
'-' + ('0' + d.getUTCDate()).slice(-2) +
'T' + ('0' + d.getUTCHours()).slice(-2) +
':' + ('0' + d.getUTCMinutes()).slice(-2) +
':' + ('0' + d.getUTCSeconds()).slice(-2) +
'.' + ('000' + d.getUTCMilliseconds()).slice(-3) +
offSign + offHours + ':' + offMins;
}
document.write('Current date and time in US Pacific Daylight Time (PDT) time zone UTC-07:00 is: <br>' +
dateForTimezone(-420,new Date()));
关于javascript - 与nodejs服务器端的时区偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649849/