isBetween使用moment-timezone

问题描述 投票:2回答:2

我试图使用moment-timezone基于一小时进行一些计算。

var time = moment.tz() // get the now
var start = moment.tz('16:00:00', 'HH:mm:ss', '');
var end = moment.tz('16:10:00', 'HH:mm:ss', '');

if(time.isBetween(start, end)) {
  console.log('yep')
}

但输出总是undefined

我已经尝试了无数种方法来实现这一点,但无济于事。

moment.tz(moment.now(), 'Europe/Lisbon').isBetween('16:00:00','17:30:00') // to get in ms

moment.tz('Europe/Lisbon').isBetween('16:00:00','17:30:00')

moment.tz(moment.tz('Europe/Lisbon').format('HH:mm:ss'), 'Europe/Lisbon').isBetween('16:00:00','17:30:00')

我能做错什么?我正在使用时区因为我需要许多不同地方的实际小时。

多谢你们

javascript momentjs
2个回答
2
投票

正如moment.tz文档所述:

moment.tz构造函数采用与矩构造函数相同的参数,但使用最后一个参数作为time zone identifier

所以你必须传递一个有效的时区(例如'Europe/Lisbon')而不是''

你的'16:00:00'中的'17:30:00'isBetween将代表今天的当地'16:00:00',正如Default部分所述。使用moment.tz(String, String, String);来解析使用区域。

这里有一个片段,显示当前时间在区域中给定范围之间时如何获得:

function update() {
  var tmz = $("#tmz").val();
  var fmt = 'HH:mm:ss';
  
  var time = moment.tz(tmz);
  var start = moment.tz('16:00:00', fmt, tmz);
  var end = moment.tz('17:30:00', fmt, tmz);
  
  $(".time").text(time.format(fmt));
  $("#zone").text(tmz);
  if(time.isBetween(start, end)) {
    console.log('yep');
    $("#bool").text("IS");
  } else {
    $("#bool").text("IS NOT");
  }
}

$("#tmz").on("change", update);
update();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data-2012-2022.min.js"></script>

<select id="tmz">
  <option value="America/Los_Angeles">America/Los_Angeles</option>
  <option value="America/New_York">America/New_York</option>
  <option value="Europe/London">Europe/London</option>
  <option value="Europe/Rome">Europe/Rome</option>
  <option value="Asia/Tehran">Asia/Tehran</option>
  <option value="Asia/Kolkata">Asia/Kolkata</option>
  <option value="Australia/Sydney">Australia/Sydney</option>
</select>

<br/>
Now is <span class="time"></span> in <span id="zone"></span><br/>
<span class="time"></span> <span id="bool"></span> between 16:00:00 and 17:30:00

0
投票

在@VincenzoC的帮助下,我能够弄明白,以便将来的参考或者试图找到最简单的解决方案的人是我用来测试这个的代码。再次感谢@VincenzoC。

码:

var tmz = 'Europe/Lisbon';
var fmt = 'HH:mm:ss';
var time = moment.tz(tmz);
var start = moment.tz('12:00:00', fmt, tmz);
var end = moment.tz('15:00:00', fmt, tmz);

if(time.isBetween(start, end)) {
    console.log('Yes it is')
}
© www.soinside.com 2019 - 2024. All rights reserved.