问题描述
基本上,我将日期设置为今天。从那天起,我想获得该月的下一个和上一个第20天。基本上,从07/10/2020(以d / m / Y格式发布的日期)开始,我应该以20/2020(之前的20日)和20/10/2020(下一个)的日期/时间戳作为结尾20)。
我尝试了几件事,最后得到:
$ld_next_str = date("d/m/Y",strtotime("20 day this month"));
$ld_next_dt = DateTime::createFromFormat("d/m/Y",$ld_next_str);
$ld_prev_str = date("d/m/Y",strtotime("20 day last month"));
$ld_prev_dt = DateTime::createFromFormat("d/m/Y",$ld_prev_str);
但是事实证明:"20 day this month"
只是将当天增加了20天,因此现在(在第七天)它返回第27天。
知道了这一点,我想我可以做一些事情,比如减去当天的当前日期(27-7 = 20),但是我觉得有一种更简单的方法,可以使用strtotime
额外的步骤。
谢谢!
PS:我知道您可以使用“第一” /“第二” /“第三”等来获得某天...但是(我认为)它不会比“十二”更高,因为我尝试了“二十” “那没用...
解决方法
前20位的公式是:
const express = require('express');
const fileUpload = require('express-fileupload');
const app = express();
app.use(fileUpload());
app.post('/upload',(req,res) => {
try {
let sampleFile = req.files.File;
} catch (err) {
res.send(err.message);
}
});
const PORT = process.env.PORT || 5000;
app.listen(PORT,() => console.log(`server started on port ${PORT}`));
下一个20号的公式是:
mktime(0,$month - (1 - floor($day / 20)),20,$year))
作为演示
mktime(0,$month + floor($day / 20),$year))
输出:
for ($month = 1; $month <= 12; $month++) {
for ($day = 1; $day <= 30; $day += 5) {
$prev = mktime(0,2020);
$next = mktime(0,2020);
echo "$day/$month/2020: ",date('d/m/Y',$prev),',$next),PHP_EOL;
}
}
,
简单地说:
$lastM = date("20/m/Y",strtotime("-1 month"));
$thisM = date("20/m/Y",time());
$nextM = date("20/m/Y",strtotime("+1 month"));
echo "$lastM <br /> $thisM <br /> $nextM";
,
使用支持cron语法的外部类(DateTime扩展名)的解决方案。
字符串“ 0 0 20 * *”指定每月和每个工作日00:00的20号。 nextCron()和previousCron()方法用于根据特定日期确定上一个/下一个时间点。
$cronStr = "0 0 20 * *"; //every 20th 00:00
//source on https://github.com/jspit-de/dt
$next20 = dt::create('now')->nextCron($cronStr);
echo $next20; //2020-10-20 00:00:00
$prev20 = dt::create('now')->previousCron($cronStr);
echo $prev20; //2020-09-20 00:00:00
将于2020年10月8日执行的输出。