Anyone knows why:
moment('2022/03/30').format('L') => 03/29/2022
moment('2022-03-30').format('L') => 03/30/2022
Is this because of time zone difference?
Yes. moment.js first checks if your string fits ISO8601 or RFC2822, then falls back to new Date(). '2022-03-30' is valid in ISO8601, but '2022/03/30' isn't. ISO8601 uses UTC, but new Date() assumes your local timezone. This means that moment('2022-03-30') represents 2022-03-30 at 00:00 UTC, while moment('2022/03/30') represents 2022-03-30 at 00:00 in your local timezone.
Regardless of what timezone its being interpreted as, its formatted in your local timezone, so because you're behind UTC it is shown as the previous day.