【问题标题】:Check if an iso string date is same or before an hour using moment使用时刻检查 iso 字符串日期是否相同或在一小时之前
【发布时间】:2021-09-28 12:48:29
【问题描述】:

我有一个 ISO 格式的字符串日期和一个 HH:mm 格式的字符串。 我想知道字符串 ISO 日期的小时是否相同或在格式 HH:mm 的字符串之前。

例子:

const isoDateString = '2021-09-28T07:30:00Z' // UTC
const hour = '07:30' // not UTC
-> result true

---

const isoDateString = '2021-09-28T07:30:00Z' // UTC
const hour = '08:30' // not UTC
-> result false

我正在使用时刻,这是我的代码:

const TIME_FORMAT = 'HH:mm'

const isoDateString = '2021-09-28T09:30:00Z'
const hour = '07:30'

const isHourSameOrBeforeIsoString = moment(
  moment(isoDateString).format(TIME_FORMAT),
).isSameOrBefore(moment(hour, TIME_FORMAT));
console.log(isHourSameOrBeforeIsoString)

它不起作用。在这两种情况下它都返回 false。为什么?

【问题讨论】:

  • 这很可能是时区问题,因为hour 变量没有指定一个
  • @KrzysztofKrzeszewski 我也试过const isHourSameOrBeforeIsoString = moment( moment(isoDateString).format(TIME_FORMAT), ).isSameOrBefore(moment.utc(hour, TIME_FORMAT))。还是一样,还是不行

标签: javascript momentjs


【解决方案1】:

在构造您的 iso 日期字符串时使用 moment.utc(),因为您应该像 UTC 一样处理它。

我还在格式化 iso 日期字符串的 moment 构造函数中添加了 TIME_FORMAT

const TIME_FORMAT = 'HH:mm'

const isoDateString = '2021-09-28T09:30:00Z'
const hour = '07:30'

const isHourSameOrBeforeIsoString = moment(
  moment.utc(isoDateString).format(TIME_FORMAT), TIME_FORMAT
).isSameOrBefore(moment(hour, TIME_FORMAT));

console.log(isHourSameOrBeforeIsoString)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    这是我认为的一种更合理的检查方式:

    您的逻辑是正确的,但它返回 false 的原因是因为您的 isoDateString 返回 8:30,而您与之比较的时间是 7:30,就像 Krzysztof 中提到的他们的评论,可能是时区问题:

    var format = 'hh:mm'
    
    // var time = moment() gives you current time. no format required.
    var time = moment('2021-09-28T09:30:00Z',format),
      testTime = moment('07:30', format);
    
    console.log(moment(time).format(format));
    console.log(moment(testTime).format(format));
      
    if (time.isSameOrBefore(testTime)) {
    
      console.log('is before')
    
    } 
    if(time.isSameOrAfter(testTime)){
    
      console.log('is after')
    
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" referrerpolicy="no-referrer"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 2015-06-22
      • 2012-03-02
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多