关于datetime:将Javascript Date对象转换为PST时区

Convert Javascript Date object to PST time zone

我需要从日历中选择一个未来的日期,假设我选择的日期是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();

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

任何帮助表示赞赏。


1
2
3
4
5
var date = new Date();
var utcDate = new Date(date.toUTCString());
utcDate.setHours(utcDate.getHours()-8);
var usDate = new Date(utcDate);
console.log(usDate);


你说:

My understanding is that PST timezone is -8:00 so I have added 14 hours to the UTC time so that time becomes 6:00am PST

呃 - 不。这将使你在第二天。如果你想留在太平洋标准时间,你将从UTC时间减去8小时。 -8:00表示它比UTC晚8小时。

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

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


建议您查看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"


主要评论:

I need to pick a future date from calender, suppose the date I am
selecting is 10/14/2014,

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

… and the format of date should be UTC

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

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

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

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


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

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

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