如何获取javascript中指定时区的开始时间和结束时间(utc)?
正如标题所述,我希望获得特定时区的一天的开始时间和结束时间,并将其转换为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
//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小时。在午夜有向前移动过渡的时区将跳过午夜。巴西就是一个很好的例子。考虑一下