如何在javascript中获取指定时区的一天的UTC开始时间和结束时间?

ich*_*lau 12 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 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 = ?
Run Code Online (Sandbox Code Playgroud)

问题是如何将特定时区的时间转换为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); 
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*int 20

取决于你到底想做什么:

// 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();
Run Code Online (Sandbox Code Playgroud)

然后start,您可以end使用该format功能随意格式化。

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

  • 任何有时区转换的日子,尤其是那些与 [夏令时](http://stackoverflow.com/tags/dst/info) 相关的日子,在当地时钟上可能多于或少于 24 小时。在午夜有向前移动过渡的时区将跳过午夜。巴西就是一个很好的例子。考虑到 [2016 年 10 月 16 日,巴西圣保罗的一天将从 1:00 开始](http://www.timeanddate.com/time/change/brazil/sao-paulo?year=2016) (3认同)