如何将javascript日期转换为特定的时区
How to convert javascript date to a particular timezone
我以毫秒为单位获得日期信息。我能正确地解析它。但是当我改变我的电脑时区,解析时间也改变了。
。
Time in millisec: 1461645900000
Actual Parsed: 26-Apr-2016 10:15:00 IST
当pc时区改变时,它变成:Tue Apr 26 2016 14:15:00 GMT+0930 (Local Standard Time)
这里我只想要实际时间。如何得到它?
这是我的小尝试:
function parseDateTime(dt, format) {
var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec" ];
var ret = "";
if (dt) {
var day="",month="",year="",hour="",mins="",secs="";
var d = new Date(dt)
var os=d.getTimezoneOffset();
if(os<0){
}
ret += d.getDate() + "-" + months[parseInt(d.getMonth())] + "-"
+ d.getFullYear() + " " + leftPad(d.getHours(), 2, "0") + ":"
+ leftPad(d.getMinutes(), 2, "0") + ":"
+ leftPad(d.getSeconds(), 2, "0");
}
document.getElementById("d1").innerHTML=ret;
console.log(ret);
}
function leftPad(number, targetLength, withWhat) {
var output = number + '';
while (output.length < targetLength) {
output = withWhat + output;
}
return output;
}
parseDateTime(1461645900000);
我用过新的日期()。toLocaleString("en-US", {timeZone: "}),但受限制。我也不感兴趣的新lib。
你对时间和表示时间之间的区别感到困惑。只有一次1461645900000。宇宙中到处都是一样的。这是一个神奇的时刻,恒星以某种方式排列,宇宙处于其发展的一个特殊点。
时区是表示日期的函数。如果我住在东京,我可能更喜欢用东京时间看我的时间。如果我住在加州,我可能更喜欢用加州时间看我的时间。这样的本地时间表示由本地时间和UTC的偏移量组成,因此可以正确解释。
当你在JS中打印或输出一个日期时,它通常被转换成一个字符串,当然,这个字符串作为一种表示,必须相对于地球上的某个地方——换句话说,相对于一些偏移量。默认的JS行为是使用你现在所在位置的偏移量,就像你在本地计算机上设置的那样。这就是为什么如果你的电脑设置为印度时间,你会看到类似于"2016年4月26日星期二10:15:00 GMT+0530(印度标准时间)"的内容。你也可以尝试date.toISOString
,它会给你"2016-04-26T04:45:00.000Z"("Z"表示UTC),或者date.toUTCString
,它会忽略你的本地时区,并给出相对于UTC的时间,如"Tue, 26 Apr 2016 04:45:00 GMT"。
我经常听到人们说他们"想要改变时区"。你不能改变时间的时区。时间本身没有时区,它们只是宇宙时钟上的时间。您可以做的是更改时间的表示,以便与特定的偏移量相对。例如,您可以尝试使用date.toLocaleString
。你觉得它有什么"局限性"?
> new Date().toLocaleString("en-US", {timeZone: "America/Los_Angeles", timeZoneName: "long"})
< "11/3/2016, 8:33:02 AM Pacific Daylight Time"
您也可以使用timeZoneName: "short"
,这将产生"PDT"。但是,"PDT"或"PST"或"IST"或其他任何东西都不能用作timeZone
选项的值,因为这些三个字母的缩写不是唯一的。例如,"PST"也可以表示"皮特凯恩标准时间"。
您尝试的格式,将timeZone
作为空字符串,将不起作用(产生一个未识别的时区错误)。
如果你想给一个字符串,如"IST",该怎么办?如上所述,这是行不通的;你必须找到一种方法将"IST"映射到"亚洲/加尔各答",这将需要某种图书馆。如果你想指定某种偏移量呢?这里,您需要某种库,它可以从偏移量推断出时区。
底线是,如果您发现自己正在解析日期,调整这个或那个组件,并使用字符串算法将其拼凑在一起,那么您正在做一些错误或不必要的事情。
我理解你想要得到相同的时间,而不管时区,当你通过毫秒。
而不是下面两行
var d = new Date(dt)
var os = d.getTimezoneOffset();
包含以下行
var os = new Date()
os = os.getTimezoneOffset();
var d = new Date((dt + (os * 60 * 1000)));
这将根据您的本地时区调整毫秒到UTC时间,并从调整后的UTC时间创建date对象,这样您将始终获得相同的时间,无论您的本地时区如何。
var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
aestTime = new Date(aestTime);
console.log('AEST time: '+aestTime.toLocaleString())
var asiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Shanghai"});
asiaTime = new Date(asiaTime);
console.log('Asia time: '+asiaTime.toLocaleString())
var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
usaTime = new Date(usaTime);
console.log('USA time: '+usaTime.toLocaleString())
首先创建您的日期的date对象(new date())并转换。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString给定:
时间单位:毫秒:1461645900000
如果您使用
创建日期new Date(1461645900000);
则该值被视为从1970-01-01T00:00:00Z开始的毫秒偏移量,并且表示与主机系统设置无关的同一时刻。当您将其写成字符串时:
实际解析日期:26apr -2016 10:15:00 IST
则使用主机系统时区设置从UTC时间值创建"本地"日期和时间值。IST是UTC+05:30,所以等效的UTC日期为:
2016-04-26T04:45:00Z
如果你将你的电脑时区更改为具有不同偏移量的时区,那么你当然会看到不同的"本地"时间,但是日期的内部时间值没有改变,它所代表的时刻也没有改变。因此,当您更改到UTC+09:30的偏移量时,"本地"时间晚了4小时,并且您得到:
2016年4月26日星期二14:15:00 GMT+0930(当地标准时间)
所以当你说:
这里我只想要实际时间。如何得到它?
表示该时间点在该时区的实际时间,即
26-Apr-2016 10:15:00 IST (UTC+0530)
Tue Apr 26 2016 14:15:00 GMT+0930
2016-04-26T04:45:00Z
是同一时刻的不同表示。
如果您想要表示特定时区中的任何日期,您可以使用UTC方法将UTC时间调整为所需的偏移量,然后使用UTC方法获取要显示的日期和时间值。
- 带时区的Javascript Datestring转换器
- 时刻时区.js允许我传递时区缩写并获取转换后的日期/时间
- 转换 JSON 日期,不考虑时区
- 如何将 UTC 日期时间(字符串)转换为访问者时区
- 时区转换
- 使用MomentJs显示日期时间,而无需进行时区转换
- 将 JavaScript Date 从一个时区转换为另一个时区
- 时区转换器,包括夏令时
- javascript时区转换器
- 时区转换层
- 时区转换为基于CST的GMT偏移
- 从时刻时区转换中提取时间(HH:MM)
- 将服务器时区转换为本地时间
- 当javascript中的系统首选项和用户首选项不同时,会出现时区转换问题
- 时区转换
- 将用户提交的日期/时间/时区转换为与时区无关的UTC
- 将日期从本地时区转换为UTC,然后再转换为本地时区
- 社交网络应用程序如何根据查看者的时区转换服务器时间?
- 使用WallTime.js进行js时区转换,但得到一个错误
- 使用javascript在本地时区转换日期