【问题标题】:Moment JS Timezones - Is there a way to check if time is before specific time?Moment JS Timezones - 有没有办法检查时间是否早于特定时间?
【发布时间】:2018-02-12 21:14:56
【问题描述】:

我需要一些功能,我需要检查我机器上的本地时间是否在特定时区的上午 9 点之前,使用 momentjs,假设所有导入工作正常,等等。

例如,如果我的当地时间是纽约的上午 11 点,我想检查时间是否早于加利福尼亚的上午 9 点。

这是迄今为止我一直在尝试的代码。有没有更好的方法来做到这一点?

if(moment().isBefore(moment(`${moment(new Date()).format("YYYY-MM-DD")} 09:00:00`).tz('America/Los_Angeles'), 'second')) {
    console.log('it is before!');
}

【问题讨论】:

    标签: timezone momentjs


    【解决方案1】:

    请注意

    moment(`${moment(new Date()).format("YYYY-MM-DD")} 09:00:00`).tz('America/Los_Angeles')
    

    不代表加利福尼亚州的上午 9:00 ('America/Los_Angeles'),而是您当地时区的今天上午 9:00,转换为 'America/Los_Angeles' 时区。

    在您的情况下,您可以使用 moment.tz() 而不是 tz() 函数。

    moment.tz 构造函数采用与 moment 构造函数相同的所有参数,但使用最后一个参数作为时区标识符。

    // Compare current time with today at 9:00 am in Los Angeles
    if(moment().isBefore(moment.tz('09:00:00', 'HH:mm:ss', 'America/Los_Angeles'), 'second')) {
        console.log('it is before!');
    }
    
    // Compare today at 11:00 am in New York with today at 9:00 am in Los Angeles
    let mNewYork = moment.tz('11:00:00', 'HH:mm:ss', 'America/Los_Angeles');
    let mCalifornia = moment.tz('09:00:00', 'HH:mm:ss', 'America/Los_Angeles')
    if(mNewYork.isBefore(mCalifornia, 'second')) {
        console.log('it is before!');
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/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>

    我只是使用'09:00:00' 字符串来获取今天上午 9:00,因为,by default

    您可以创建仅指定部分单位的矩对象,其余的将默认为当前日、月或年,或 0 表示小时、分钟、秒和毫秒。

    【讨论】:

    • 这是一个很棒的答案!如果我可以进一步扩展它,如果不是上午 11:00:00 时间,如果它只是渲染时的当地时间呢?喜欢new Date() 之类的吗?
    • 您可以简单地使用moment() 来获取当前日期和时间。您可以使用moment.tz('America/Los_Angeles') 获取洛杉矶的当前日期和时间,但请注意,moment()moment.tz('America/Los_Angeles') 在用于query 等函数时是等效的isBefore。抱歉,但我不确定我是否明白您评论中的意思。
    • 嗯,是的,我以为我使用正确。基本上,在我的应用程序中,我需要根据渲染结果的机器的本地时间是否早于数据的时区日期来填充数据。因此,因此,如果用户恰好在纽约,它会像“好吧,我们比加利福尼亚的某人早三个小时,让我们看看那里的时间,并确保它在他们的时间上午 9 点之前”之类的事情。时区可能遍布美国
    • 实际上,我想我误读了您之前的内容。我认为这条线毕竟是我正在寻找的:// Compare current time with today at 9:00 am in Los Angeles if(moment().isBefore(moment.tz('09:00:00', 'HH:mm:ss', 'America/Los_Angeles'), 'second')) { console.log('it is before!'); }
    • 我认为您正在寻找我的 sn-p 的第一个 if 的检查。在您的问题中,问题是您获得 9:00 am in California 的方式,而 moment() 可以获取当地时间(纽约或其他任何地方)的当前时间
    猜你喜欢
    • 2017-03-13
    • 2012-01-18
    • 2013-05-12
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多