Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 js,获取不同时区的午夜当地时间_Javascript_Date_Time_Timezone - Fatal编程技术网

Javascript js,获取不同时区的午夜当地时间

Javascript js,获取不同时区的午夜当地时间,javascript,date,time,timezone,Javascript,Date,Time,Timezone,我想计算一下现在的当地时间,洛杉矶第二天24:00。这样做的目的是在洛杉矶把饼干放在下一个午夜 我使用了矩和矩时区,但是,我不能证明单个函数的构建大小的开销是合理的 这就是我正在使用的,但我一直坚持将洛杉矶午夜的时间转换回当地时间,因为当我转换回当地时间时,它早于当前时间。我认为在倒车时,converttouthertimezone功能不会出现问题,但我不太确定还有什么需要探讨的 非常感谢您的帮助 const convertTouthortimeZone=(日期、从日期到日期)=>{ 常数ut

我想计算一下现在的当地时间,洛杉矶第二天24:00。这样做的目的是在洛杉矶把饼干放在下一个午夜

我使用了矩和矩时区,但是,我不能证明单个函数的构建大小的开销是合理的

这就是我正在使用的,但我一直坚持将洛杉矶午夜的时间转换回当地时间,因为当我转换回当地时间时,它早于当前时间。我认为在倒车时,
converttouthertimezone
功能不会出现问题,但我不太确定还有什么需要探讨的

非常感谢您的帮助

const convertTouthortimeZone=(日期、从日期到日期)=>{
常数utc=date.getTime()+(3600000*from)
返回新日期(utc+(3600000*至))
}
console.log(
“洛杉矶本地时间”,
新日期().toLocaleString('en-US',{时区:'America/Los_Angeles'})
)
常量LA_偏移量=-7
//我使用的是AEST时区-10
const LOCAL_OFFSET=新日期()。getTimezoneOffset()/60
const midnightInLA=(本地偏移量)=>{
//获取洛杉矶的当前时间
const la=converttouthertimezone(新日期(),本地偏移量,la_偏移量)
console.log('当前时间单位为LA',LA)
//在洛杉矶时区将日期设置为午夜
洛杉矶设定小时数(24,0,0,0)
console.log('洛杉矶的下一个午夜',洛杉矶)
//转换回当地时间
返回转换区(la、la_偏移、localOffset)
//尤利亚斯·亨卡给出了正确的答案,但删除了他的帖子。
//反向偏移
返回转换区(la,la_偏移量*-1,本地偏移量*-1)
}
console.log(
“当地时间洛杉矶午夜”,
午夜嵌入(局部偏移)
)

我相信你问题中的片段非常接近,但似乎你在错误的方向添加偏移量

您可能会遇到夏令时的问题-例如,洛杉矶在夏季月份的UTC-7小时,但通常是UTC-8小时。如果您不想使用,那么我能想到的唯一选项就是解析当时的区域设置格式字符串

这不是最可靠的方法,只适用于
en-US
格式化时间。根据浏览器的不同,
America/Los_Angeles
时区也可能不可用

let now=new Date()
//使用字符串匹配获取当前时间(以LA为单位),以便能够计算偏移量
//这允许考虑使用夏令时
//注意:LocaleTimeString是en-US格式的。如果使用不同的区域设置,请小心
让timeInLA=now.toLocaleTimeString('en-US',{时区:'America/Los_Angeles'})
.match(/([0-1]?[0-9])\:([0-5]?[0-9])\:[0-5]?[0-9]\s(上午|下午)/)
//修剪第一个匹配元素
.切片(1)
//考虑AM/PM并将值转换为整数
.map((e,i,a)=>i==0&&a[3]==PM'?+e+12+e)
//上午/下午
.slice(0,-1)
//正值表示当地时间早于洛杉矶时间
让偏移量=[now.getHours(),now.getMinutes()].map((e,i)=>e-timeInLA[i])
//将小时和分钟相加以获得总偏移量并转换为毫秒
设totalOffsetMS=(偏移量[0]*3600+偏移量[1]*60)*1000
//明天本地午夜-添加24小时和零其他值
让localmiddnightmother=新日期(+now.setHours(24,0,0,0))
//洛杉矶午夜将在当地午夜时间发生,并添加偏移量
让localTimeWhenMidnightInLA=新日期(+LocalMidNight明天+totalOffsetMS)

console.log(`明天洛杉矶午夜时,您所在位置将是“${localtimewhenmidnowninginla.toDateString()}${localtimewhenmidnowninginla.toTimeString()}”)
洛杉矶标准时间为UTC-0800。当偏移量更改为UTC-0700时,将在3月第二个星期日凌晨2点更改为夏令时(DST)。它在11月的第一个星期日凌晨2点结束

这些规则很可能会在将来持续一段时间,如果您只对当前日期感兴趣,您可以使用这些规则,直到它们发生变化。您可以计算出给定日期和时间的偏移量,然后在洛杉矶为下一个午夜创建一个日期。我希望你把这些信息放在问题中,而不是评论中。见下文

/**
*计算给定日期和时间的偏移量(以LA为单位)。
*洛杉矶夏令时从三月的第二个星期日开始
*协调世界时10:00。之后,偏移量为UTC-0700
*洛杉矶夏令时在11月的第一个星期日09:00结束
*UTC。之后,偏移量为UTC-0800
*
*@param{Date}Date-Date对象
*@如果观察到DST,则返回(布尔值)}true
*/
函数getLAOffset(日期){
//在UTC中启动DST
var start=新日期(Date.UTC(Date.getUTCFullYear(),2,1,10));
start.setUTCDate(start.getUTCDate()+(7-start.getUTCDay())%7+7);
//在UTC中获取DST端
var end=新日期(Date.UTC(Date.getUTCFullYear(),10,1,9));
end.setUTCDate(end.getUTCDate()+(7-end.getUTCDay())%7);
返回(日期>=开始和日期<结束)?-7:-8;
}
/**返回在LA中设置为午夜的日期对象
*指定日期后的下一个午夜。
*偏移量来自getLAOffset
*
*@param{Date}Date用于本地日期值
*@returns{Date}在洛杉矶设置为午夜
*/
函数getLAMidnight(日期){
var d=新日期(+日期);
//获取偏移量。如果小时早于偏移量,则设置为偏移量
//如果小时在偏移之后,则设置为“明天偏移”
//重新检查偏移量,必要时进行调整
var偏移=getLAOffset(d);
var midLA=d.setUTCHours(-offset,0,0,0);
如果(d