请问如何获取当月的最后一天16点至次月1号的9点前这段时间?

因涉及跨月 所以每月的月底页面需要关闭,但是如何能获取到这个时间段?

阅读 2.5k
4 个回答

js

let d = new Date, y = d.getFullYear(), m = d.getMonth()

// 当月最后一天16点
let stime = new Date(y, m + 1, 0, 16)
// 次月1号的9点
let etime = new Date(y, m + 1, 1, 9)

使用 strtotime 可以获取到时间戳,然后使用 date 格式化输出。

<?php 

// 获取这个月最后一天的 16:00:00 的时间戳
$lastDay = strtotime('last day of this month 16:00:00');

var_dump(date('Y/m/d H:i:s', $lastDay));

// 获取下个月最第一天的 09:00:00 的时间戳
$nextMonthFirstDay = strtotime('first day of next month 09:00:00');

var_dump(date('Y/m/d H:i:s', $nextMonthFirstDay));
新手上路,请多包涵

针对 @唯一丶 的回答
我有了以下思路:

  1. 计算出从一天的 16 点到第二天早上九点这一时间段的时间戳差值(一天 24 小时,不会因为月份或者某一天发生改变)
  2. 用 dayjs 获取当月最后一天 16 点的时间戳(这个不难)
  3. 用 dayjs 获取的时间戳加上计算出的时间戳差值,就是次月 1 号9点的时间戳
  4. 现在你得到了当月最后一天 16 点的时间戳和次月 1 号9点的时间戳,你想怎么处理随你便

就是新建个Date对象,设置成下个月一号9点,再减去17小时得到月底16点

let nextMonth9OClock = new Date();
nextMonth9OClock.setMonth(nextMonth9OClock.getMonth() + 1);
nextMonth9OClock.setHours(9);
nextMonth9OClock.setMinutes(0);
nextMonth9OClock.setSeconds(0);
nextMonth9OClock.setMilliseconds(0);
let thisMonthLast16OClock = new Date(nextMonth9OClock.getTime() - 17 * 3600e3);
console.log(`${thisMonthLast16OClock}\n${nextMonth9OClock}`)
/*
Wed Aug 31 2022 16:00:00 GMT+0800 (中国标准时间)
Thu Sep 01 2022 09:00:00 GMT+0800 (中国标准时间)
*/
推荐问题