如何获取javascript中指定时区的开始时间和结束时间(utc)?

如何获取javascript中指定时区的开始时间和结束时间(utc)?,javascript,timezone,momentjs,Javascript,Timezone,Momentjs,正如标题所述,我希望获得特定时区的一天的开始时间和结束时间,并将其转换为utc时间。以下是我实施的一部分: //convert current local time to specified timezone time var converted = moment.tz(moment(), timezone).format("YYYY-MM-DD"); var full_format = "YYYY-MM-DD HH:mm:ss"; // get start time and end time

正如标题所述,我希望获得特定时区的一天的开始时间和结束时间,并将其转换为utc时间。以下是我实施的一部分:

//convert current local time to specified timezone time
var converted = moment.tz(moment(), timezone).format("YYYY-MM-DD");
var full_format = "YYYY-MM-DD HH:mm:ss";

// get start time and end time in the timezone
var start = converted + " 00:00:00";
var end = converted + " 23:59:59";

// how to convert them in utc time by momentjs or other methods? 
var utc_start_time = ?
var utc_end_time = ?
问题是如何将特定时区的时间转换为utc时间。或者有其他合适的解决方案吗?谢谢大家!

编辑:

我想出了一个自己做的不太像样的方法

var converted = moment.tz(moment(), timezone).format("YYYY-MM-DD");         
var full_format = "YYYY-MM-DD HH:mm:ss";
var start = converted + " 00:00:00";
var end = converted + " 23:59:59";
var utc_start_time = moment(start).add(utc_offset * -1, 'hours').format(full_format);
var utc_end_time = moment(end).add(utc_offset * -1, 'hours').format(full_format); 

欢迎提出任何改进建议。谢谢

具体取决于您想做什么:

// for the current day
var start = moment.tz(timezone).startOf('day').utc();
var end = moment.tz(timezone).endOf('day').utc();

// for a specific moment (m)
var start = m.clone().tz(timezone).startOf('day').utc();
var end = m.clone().tz(timezone).endOf('day').utc();

// for a specific calendar date
var m = moment.tz(date, format, timezone);
var start = m.clone().startOf('day').utc();
var end = m.clone().endOf('day').utc();
然后,您可以使用
format
功能按自己喜欢的方式格式化
start
end


请记住,并非每个时区的每一天都从午夜开始,也不是所有本地日都有24小时。

这里有一个用于处理时区的本机解决方案

它可以找到指定时区的一天的开始/结束时间

要将
日期
实例转换为UTC时间,请使用

const beginingOfDay=(options={})=>{
const{date=newdate(),timeZone}=options;
const parts=Intl.DateTimeFormat(“en-US”{
时区,
小时循环:“h23”,
小时:“数字”,
分钟:“数字”,
第二:“数字”,
}).格式部分(日期);
const hour=parseInt(parts.find((i)=>i.type==“hour”).value);
const minute=parseInt(parts.find((i)=>i.type==“minute”).value);
const second=parseInt(parts.find((i)=>i.type==“second”).value);
返回新日期(
1000 *
数学地板(
(日期-小时*3600000-分钟*60000-秒*1000)/1000
)
);
};
常量endOfDay=(…参数)=>
新日期(beginingOfDay(…args).getTime()+86399999);
const beginingOfYear=()=>{};
log(beginingOfDay({时区:“GMT”}));
log(endOfDay({timeZone:GMT}));
console.log(beginingOfDay({时区:“亚洲/东京”}));

console.log(endOfDay({时区:“亚洲/东京”}))我也遇到了这个问题。不幸的是,moment.js似乎在告诉人们使用其他选项。(从他们的网站来看,我猜他们更关注美国政治,呃)。此外,许多被接受的答案中的momemt函数现在都被去除了。卢克逊图书馆是《时代》杂志建议的第一个可供选择的图书馆

import { DateTime } from "luxon";

var dt = DateTime.local() //get the current time in local timezone, for me this is Pacific Time (West Coast USA)
  .endOf('day')           // set the time to the end of the current day
  .setZone('GMT');        // change time zone back to GMT (zero offset)
console.log(dt.toISO());  // 2021-01-12T07:59:59.999Z

您是否试图计算它们之间的差距?问题与[如何将JavaScript日期转换为UTC?]不完全相同()。“处理时间”中不包含任何时区信息。@Zamboney没有,只是尝试获取转换时间的utc时间。是否有帮助?再次感谢您的回复。它确实回答了我的问题。我应该在询问之前先看一下医生。但是你能给我举个例子,说明在什么情况下,一天不是从上午12点开始的,或者没有24小时。任何时区转换的一天,特别是与时区转换相关的一天,按当地时钟计算,可能有多于或少于24小时。在午夜有向前移动过渡的时区将跳过午夜。巴西就是一个很好的例子。考虑一下