javascript - 与nodejs服务器端的时区偏移

标签 javascript node.js date datetime

我有一个 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/

相关文章:

php - Facebook 应用程序 - 如何发送应用程序建议并直接在用户墙上发布

javascript - 为什么这个中断在内联 if 中不起作用?

javascript - 使用 node.js 重启/关闭服务器?

javascript - 将对象数组转换为对象

node.js - 为什么似乎没有用于 Node 的任何强大的 HTTP 服务器模拟包? (或者有吗?)

Java:从日期获取月份整数

javascript - 我如何将其变成多场比赛?

javascript - 如何将 Quicktime Player 调整为 HTML/CSS DIV 的大小

php - 使用 PHP PDO 查询 MySQL 中的 DATE

xml - 日期到日期时间的 XQuery 转换