Javascript Moment.js可以根据日期优雅高效地开始为期两周的课程

Javascript Moment.js可以根据日期优雅高效地开始为期两周的课程,javascript,performance,momentjs,Javascript,Performance,Momentjs,我需要根据给定日期计算支付期的开始时间。支付期为周三至两周后的周二。因此,给定一个付款期开始日期(a)和另一个日期(b),我需要计算付款期开始日期(c) 我使用Moment.js来处理日期和时区,所以自然的做法是也使用它 我可以这样做: import 'moment' from 'moment-timezone' const tzString = 'America/New_York' const oneStartOfPayPeriod = '1/25/2017' const dateForm

我需要根据给定日期计算支付期的开始时间。支付期为周三至两周后的周二。因此,给定一个付款期开始日期(a)和另一个日期(b),我需要计算付款期开始日期(c)

我使用Moment.js来处理日期和时区,所以自然的做法是也使用它

我可以这样做:

import 'moment' from 'moment-timezone'

const tzString = 'America/New_York' 
const oneStartOfPayPeriod = '1/25/2017'
const dateFormatString = 'M/DD/YYYY'

let a = moment(oneStartOfPayPeriod).tz(tzString)
let b1 = moment('1/26/2017', dateFormatString).tz(tzString)
let b2 = moment('11/23/1999', dateForamtString).tz(tzString)

const getDaysPastPayPeriod = b => Math.abs(
    b.startOf('day')
    .diff(
        a.startOf('day'),
        'days'
    ) % 14) 

const getStartOfPayPeriod = b => b.subtract(getDaysPastPayPeriod(b), 'days')

let [c1, c2] = [getStartOfPayPeriod(b1), getStartOfPayPeriod(b2)]
我还没有测试,因为我在写这个问题的时候就写了:)

我想知道:

  • 效率高吗?(需要在浏览器、桌面和移动设备中传输和运行)
  • 有更优雅的解决方案吗?(我真的不喜欢getDaysPastPayPeriod函数)

  • (虽然这比我开始写这个问题之前想象的要好)

    不要使用没有参数的矩字符串解析器,字符串不是ISO 8601格式的(请参阅),而是在您的情况下使用:
    矩('1/26/2017','M/DD/YYYY')
    谢谢您提供的信息,我将编辑我的问题。