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

新手上路,请多包涵

如标题所述,我想获取特定时区一天的开始时间和结束时间,并将它们转换为 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);

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

原文由 ichbinblau 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
2 个回答

取决于你到底想做什么:

 // 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();

然后,您可以格式化 startend 但是您喜欢使用 format 功能。

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

原文由 Matt Johnson-Pint 发布,翻译遵循 CC BY-SA 3.0 许可协议

我也遇到了这个问题。不幸的是,moment.js 似乎在告诉人们使用其他选项。 (我猜他们更关注美国政治,从他们的网站来看,呃)。此外,已接受的答案中的许多 momemt 函数现在都被描述了。 Luxon 是当时建议作为替代方案的第一个库。

 let DateTime = luxon.DateTime;

var dt = DateTime.local() // get the current time in local timezone
  .startOf('day')         // set the time to the start of the current day
  .setZone('GMT');        // change time zone back to GMT (zero offset)
console.log('Start: ' + dt.toISO());  // UTC equivalent for local start of day

var dt = DateTime.local() // get the current time in local timezone
  .endOf('day')           // set the time to the end of the current day
  .setZone('GMT');        // change time zone back to GMT (zero offset)
console.log('End  : ' + dt.toISO());  // UTC equivalent for local end of day (1 ms before midnight)
 <script src="https://cdn.jsdelivr.net/npm/luxon@1.22.2/build/global/luxon.min.js"></script>

原文由 honkskillet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题