Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setUTCminutes与setMinutes之间的差异_Javascript_Date_Timezone_Utc - Fatal编程技术网

Javascript setUTCminutes与setMinutes之间的差异

Javascript setUTCminutes与setMinutes之间的差异,javascript,date,timezone,utc,Javascript,Date,Timezone,Utc,JavaScript日期方法之间是否存在任何差异: setUTCminutes() 对 setMinutes() 使用setMinutes()是否会将时区恢复为UTC以外的其他时区 我正在考虑是否使用日期字符串设置UTC时间: var dUTC = new Date('March 20, 2016 20:45:00 UTC'); 或使用UTC方法设置日期,然后设置小时等: var d = new Date(2016,3,20); d.setUTCHours(20); d.setUTCmin

JavaScript日期方法之间是否存在任何差异:

setUTCminutes()

setMinutes()
使用
setMinutes()
是否会将时区恢复为UTC以外的其他时区

我正在考虑是否使用日期字符串设置UTC时间:

var dUTC = new Date('March 20, 2016 20:45:00 UTC');
或使用UTC方法设置日期,然后设置小时等:

var d = new Date(2016,3,20);
d.setUTCHours(20);
d.setUTCminutes(45);
var d = new Date(2016,20,3); 
d.setUTCHours(20);
d.setUTCminutes(45);

但是,我担心第二种方法在某些情况下可能不准确。我不想以错误的UTC日期结束。我的加载项可以在世界各地使用。

日期实例在本质上始终是UTC时间戳。非UTC API,如
.toString()
.getHour()
.getMinute()
等,都基于代码运行环境的时区应用转换。非UTC设置器也做同样的事情

因此,在任何语言环境中,当您调用
new Date()
时,都会得到一个日期实例,它的行为与您的本地时区类似,但在内部它是UTC时间戳

如果要根据UTC参数显式创建日期实例,可以使用
Date.UTC()
创建要传递给日期构造函数的时间戳:

var utc = new Date(Date.UTC(2016, 1, 29, 19, 11, 45));
这使得日期实例与伦敦计算机(现在不是BST)构建的日期实例相同,具有:

因为伦敦时间(不是夏天)与UTC时间相同

JavaScript日期方法之间是否存在任何差异:

setUTCminutes()
setUTCminutes()与

setMinutes()

对。Set-UTCMinutes将根据新的UTC分钟值调整内部时间值(即UTC)

setMinutes做同样的事情,但会允许内部时区,因此时间的变化可能会有所不同(因为许多时区不是完整的小时)

e、 g.对于UTC+0030时区,如果本地时间为01:00,则将UTC分钟设置为30不会起任何作用(因为当前为UTC 00:30),但将本地分钟设置为30将将UTC分钟设置为00:00

此外,如果新的分钟数导致日期跨越夏令时边界,则新时间减去UTC和local中的旧时间可能会有所不同

new Date(new Date('March 20, 2016 20:45:00 UTC')).toString()
"Mon Mar 21 2016 02:15:00 GMT+0530 (India Standard Time)"
new Date(new Date('March 20, 2016 20:45:00 UTC')).toUTCString()
"Sun, 20 Mar 2016 20:45:00 GMT"

new Date(new Date('March 20, 2016 20:45:00 UTC').setMinutes(0, 0, 0)).toString()
"Mon Mar 21 2016 02:00:00 GMT+0530 (India Standard Time)"
new Date(new Date('March 20, 2016 20:45:00 UTC').setMinutes(0, 0, 0)).toUTCString()
"Sun, 20 Mar 2016 20:30:00 GMT"

new Date(new Date('March 20, 2016 20:45:00 UTC').setUTCMinutes(0, 0, 0)).toString()
"Mon Mar 21 2016 01:30:00 GMT+0530 (India Standard Time)"
new Date(new Date('March 20, 2016 20:45:00 UTC').setUTCMinutes(0, 0, 0)).toUTCString()
"Sun, 20 Mar 2016 20:00:00 GMT"
使用setMinutes()是否会将时区恢复为UTC以外的其他时区

不。日期对象没有时区,主机系统有。日期对象使用UTC时间值,然后在计算中使用主机的时区,它不是日期本身的属性(因此使用方法getTimezoneOffset)

我正在考虑是否使用日期字符串设置UTC时间:

var dUTC = new Date('March 20, 2016 20:45:00 UTC');
var dUTC=新日期(“2016年3月20日20:45:00 UTC”)

不!不要那样做。强烈地重新开始使用日期构造函数解析字符串(只需在此处搜索有关解析的问题数量)。ECMA-262不支持该日期格式,因此解析完全依赖于实现。时区可能会被重新确认,或者您可能会得到一个无效的日期

或使用UTC方法设置日期,然后设置小时等:

var d = new Date(2016,3,20);
d.setUTCHours(20);
d.setUTCminutes(45);
var d = new Date(2016,20,3); 
d.setUTCHours(20);
d.setUTCminutes(45);
但是,我担心第二种方法在实际应用中可能不准确 有些情况

传递给日期构造函数的值似乎不正确,值为年、月、日。也许你的意思是:

new Date(2016, 3, 20)  // 20 April, 2016
在上面创建日期时,主机时区将影响用于创建UTC时间值的值。然后使用UTC方法设置时间很可能会导致意外结果,因此不要对此进行修改

如果您希望在任何地方都能使用,请始终使用UTC,然后仅转换为“本地”作为输出。因此,如果要基于UTC创建日期和时间:

var d = new Date(Date.UTC(2016, 3, 20, 20, 45);
将创建2016-04-20T20:45:00Z的日期

The setMinutes() method sets the minutes for a specified date according to local time.
The setUTCMinutes() method sets the minutes for a specified date according to universal time.
如果本地时区没有小时偏移量(如印度GMT+5:30),则结果将不同

new Date(new Date('March 20, 2016 20:45:00 UTC')).toString()
"Mon Mar 21 2016 02:15:00 GMT+0530 (India Standard Time)"
new Date(new Date('March 20, 2016 20:45:00 UTC')).toUTCString()
"Sun, 20 Mar 2016 20:45:00 GMT"

new Date(new Date('March 20, 2016 20:45:00 UTC').setMinutes(0, 0, 0)).toString()
"Mon Mar 21 2016 02:00:00 GMT+0530 (India Standard Time)"
new Date(new Date('March 20, 2016 20:45:00 UTC').setMinutes(0, 0, 0)).toUTCString()
"Sun, 20 Mar 2016 20:30:00 GMT"

new Date(new Date('March 20, 2016 20:45:00 UTC').setUTCMinutes(0, 0, 0)).toString()
"Mon Mar 21 2016 01:30:00 GMT+0530 (India Standard Time)"
new Date(new Date('March 20, 2016 20:45:00 UTC').setUTCMinutes(0, 0, 0)).toUTCString()
"Sun, 20 Mar 2016 20:00:00 GMT"

日期实例始终基于UTC时间戳。重要的是在使用特定于语言环境的API时是否应用了任何翻译。请记住,有些时区与UTC的距离甚至不到一小时的倍数。通过UTC设置器设置UTC日期肯定会起作用。如果你想使用字符串,你可能应该使用ISO8601格式。我不知道它是否仍然被称为“BST”;我来自遥远的过去。因为时区的命名没有标准,你可以随意称呼它但它似乎是常用的。上一个示例中的超小错误:var d=新日期(Date.UTC(2016,3,20,20,45);应该是var d=新日期(Date.UTC(2016,3,20,20,45));缺少最后一个括号-谢谢!