8

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

我正在做的是

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

我的理解是 PST 时区是 -8:00,所以我在 UTC 时间上增加了 14 小时,这样时间就变成了太平洋标准时间上午 6:00

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

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

如果我写

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

那么它工作得很好,但在这种情况下,问题是当请求来自不同时区时,时间总是不同的。

任何帮助表示赞赏。

4

8 回答 8

10

这对我有用:

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

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

于 2021-02-23T18:46:55.103 回答
8

你说:

我的理解是 PST 时区是 -8:00,所以我在 UTC 时间上增加了 14 小时,这样时间就变成了太平洋标准时间上午 6:00

呃 - 不。这会让你在第二天。如果你想留在 PST,你会从 UTC 时间中 减去8 小时。-8:00表示比UTC晚8 小时。

但是,太平洋时区不仅仅固定在 PST。它在 PST (-8) 和 PDT (-7) 之间交替进行夏令时。为了确定正确的偏移量,您需要使用实现 TZDB 数据库的库。请在此处参考此重复答案

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

于 2013-07-04T19:23:04.200 回答
4

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

这是您的替代方案:

使用:Date.UTC(年、月、日、时、分、秒、毫秒)

示例:太平洋标准时间 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”

于 2012-12-13T06:25:10.820 回答
4
var date = new Date();
var utcDate = new Date(date.toUTCString());
utcDate.setHours(utcDate.getHours()-8);
var usDate = new Date(utcDate);
console.log(usDate);
于 2016-11-10T19:25:03.147 回答
1

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 像素而创建的代码

于 2020-03-24T21:55:49.317 回答
0

主要是评论:

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

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

…日期的格式应该是UTC

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

我觉得你很困惑。如果你想说 2014-10-14T06:00:00-08:00 的 UTC,那么等价的就是 2014-10-14T14:00:00Z。

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

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

于 2012-12-13T07:07:18.827 回答
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(); 
于 2021-02-23T17:01:20.823 回答
-1

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

或者,您可以使用 UTC 字符串创建一个新的 Date 对象:

var date = new Date();
date = date.addHours(14);
var dateUTC = new Date(date.toUTCString());
于 2012-12-13T06:29:24.350 回答