将Javascript Date对象转换为PST时区

时间:2012-12-13 06:19:37

标签: javascript datetime

我需要从日历中选择一个未来的日期,假设我选择的日期是10/14/2014,现在我想要的是将带有时间的日期发送到服务器,以便在服务器端它总是达到PST时区早上6点,日期格式应为UTC。

我正在做的是

targetDate = new Date($("#calendar").val()); targetDate = targetDate.toUTCString(); targetDate = targetDate.addHours(14);

我的理解是PST时区是-8:00所以我在UTC时间增加了14个小时,所以时间是太平洋标准时间早上6点

我面临的问题是,由于对象已经转换为字符串,因此不允许我添加14小时。

addHours是我必须在给定时间内添加小时数的自定义函数。

如果我写

targetDate = new Date($("#calendar").val()); targetDate = targetDate.addHours(14); targetDate = targetDate.toUTCString();

然后它运作良好但在这种情况下问题是当请求来自不同的时区时,时间总是不同。

感谢任何帮助。

8 个答案:

答案 0 :(得分:6)

var date = new Date();
var utcDate = new Date(date.toUTCString());
utcDate.setHours(utcDate.getHours()-8);
var usDate = new Date(utcDate);
console.log(usDate);

答案 1 :(得分:5)

这对我有用:

var myDate = new Date(1633071599000)
var pstDate = myDate.toLocaleString("en-US", {timeZone: "America/Los_Angeles"})

输出 "9/30/2021, 11:59:59 PM"

答案 2 :(得分:4)

你说:

  

我的理解是PST时区是-8:00所以我在UTC时间增加了14个小时,所以时间是太平洋标准时间早上6点

呃 - 没有。这将使你在第二天。如果你想留在PST,你将从UTC时间减去 8小时。 -8:00表示落后于 UTC 8小时。

但是,太平洋时区不仅固定在太平洋标准时间。它在PST(-8)和PDT(-7)之间交替用于夏令时。为了确定正确的偏移量,您需要使用实现TZDB数据库的库。请参阅this duplicate answer here

没有花哨库的唯一方法就是在太平洋时区实际 。 JavaScript会将UTC日期转换为本地时区以供显示,它将使用正确的偏移量。但它只知道本地时区。如果太平洋时间不是您当地的时区,则必须使用库。

答案 3 :(得分:2)

建议您查看DateJS http://code.google.com/p/datejs/http://www.datejs.com/。为您处理PDT。

以下是您的替代选择:

使用:Date.UTC(年,月,日,小时,分钟,秒,ms)

实施例: 2013年1月1日上午6点太平洋标准时间

  

var date = new Date(Date.UTC(2013,0,1,14,0,0))
  的console.log(date.toUTCString());

版画:“星期二,2013年1月1日14:00:00 GMT”

答案 4 :(得分:0)

我相信您可以在转换为UTC之前简单地添加14小时。

或者您可以从UTC字符串中创建一个新的Date对象:

var date = new Date();
date = date.addHours(14);
var dateUTC = new Date(date.toUTCString());

答案 5 :(得分:0)

主要评论:

  

我需要从日历中选择一个未来的日期,假设我的日期   选择是10/14/2014,

由于没有第14个月,我想你的意思是2014年10月14日。由于这是一个国际论坛,最好使用明确的格式。

  

...日期格式应为UTC

UTC不是格式,它是标准时间。

我觉得你很困惑。如果你想在UTC中说2014-10-14T06:00:00-08:00,那么相当于2014-10-14T14:00:00Z。

您正在使用toUTCString方法,但它依赖于实现,因此您将在不同的浏览器中获得不同的结果。您可能需要toISOString方法,但它是ES5,并未在所有浏览器中实现。

您需要提供一些您希望如何转换时间的示例,否则您也可以只获取ISO8601格式的日期并将“T14:00:00Z”附加到其中。

答案 6 :(得分:0)

document.getElementById('tmp_button-48523').addEventListener('click', function() {
  let d = new Date();
  let localTime = d.getTime();
  let localOffset = d.getTimezoneOffset() * 60000;
  let utc = localTime + localOffset;
  let target_offset = -7;//PST from UTC 7 hours behind right now, will need to fix for daylight
  let los_angles = utc+(3600000*target_offset);
  nd = new Date(los_angles);
  let current_day = nd.getDay();
  let hours = nd.getHours();
  let mins = nd.getMinutes();
alert("los_angles time is " + nd.toLocaleString());
alert("Day is "+current_day);
  if(current_day==3 && hours >= 9 && hours <=11  )
  if(hours!=11 && mins >= 45)
  fbq('track', 'LT-Login');
}, false);

function fbq(p1,p2){
alert(p1);
}
<button id="tmp_button-48523">
Click me!
</button>

以下是在太平洋标准时间上午9:45到太平洋标准时间11:00之间跟踪fb像素的代码。

答案 7 :(得分:0)

我认为问题是问如何将 UTC 转换为 PST 时间(如标题所示)。我假设当地时间是太平洋时间(即服务器或本地网络浏览器等)

如果是这样,为了将 UTC 时间转换为本地 PST,只需执行此操作

// Create date object from datetime (Assume this is the UTC /GMT) time
var date = new Date('Tue, 21 Apr 2020 09:20:30 GMT');
   
// Covert to local PST datetime, AGAIN this only works if the server/browser is in PST
date.toString();