闻所未闻的倒计时思路。。。。。

1 天前
 firhome

公司产品有一个场景。

1.用户新增一个数据,用户可以自己处理这条数据,也可以委托我们来处理这条数据。

2.我们平台希望用户来委托我们处理这条数据(我们利益更大,但也可以给用户一些附加的服务)

3.为了营造这种紧迫感,数据旁边加了个倒计时。类似“xxx 分钟后将失去委托平台的权利”

老板的思路:“我们规定 3 小时内允许用户委托,3 小时后不允许委托,但是用户可能下午 4,5 点新增数据,然后就下班了。第二天上班看到数据,委托时效就过了,所以如果是在上班时间。。。倒计时生效,下班了倒计时暂停。第二天上班,倒计时继续……同时在下班后这段时间,用户依旧可以操作,只是倒计时暂停状态。”

……你们见过这种场景吗?上下班时间要暂停,包括节假日周末。。。

跟产品反馈反抗过别的方案,产品说老板不满意,一定要这样

11070 次点击
所在节点    职场话题
108 条回复
gyp
13 小时 2 分钟前
@bthulu #14 这不是基操吗,很多 API 接口可以调用获取节假日
Xlc
12 小时 6 分钟前
不考虑节假日,就固定周一到周五,计时结束后,计时处提示用户点击,给弹一个“因节假日原因错过委托权力的按钮”,重新计时,可无限点,不怕滥用,用户滥用这个按钮说明他还是有使用委托的意图
Gehrman
12 小时 4 分钟前
@pkoukk 这个依赖后台不就行了
whyso
11 小时 28 分钟前
3 小时能不能换成 3 天,实现简单点,客户也没有那么强的紧迫感了
brant1
10 小时 41 分钟前
股票不就是这样吗? 休市
lucybenz
10 小时 35 分钟前
需求冇问题

方案一、倒计时剩余 1 小时 4 分钟 27 秒(工作时间),目前是休息时间倒计时暂停,将在 2024 年 10 月 18 日早 9 点重新开始计时;

方案二、对于下午 5 点提交的数据依然做 3h 倒计时,第二天打开系统时提醒,您的数据委托窗口期已过,由于前边窗口期包含了非工作时间,系统小秘书自动帮您重新申请了窗口时间延长 1 小时 30 分钟,以免影响您的委托需求,祝您工作顺利! 这个补偿部分 甚至可以从客户访问站点开始计算
breeze5942
6 小时 10 分钟前
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Duration;

public class TaskDelegateService {

private static final LocalTime WORK_START_TIME = LocalTime.of(9, 0); // 上班时间 9:00
private static final LocalTime WORK_END_TIME = LocalTime.of(18, 0); // 下班时间 18:00
private static final Duration MAX_DELEGATE_DURATION = Duration.ofHours(3); // 3 小时倒计时

// 模拟记录用户操作的时间和倒计时剩余时间
private LocalDateTime taskCreatedTime;
private Duration remainingTime;

public TaskDelegateService(LocalDateTime taskCreatedTime) {
this.taskCreatedTime = taskCreatedTime;
this.remainingTime = MAX_DELEGATE_DURATION; // 初始化为 3 小时倒计时
}

// 判断是否在上班时间
private boolean isWithinWorkHours(LocalDateTime dateTime) {
LocalTime time = dateTime.toLocalTime();
return !time.isBefore(WORK_START_TIME) && !time.isAfter(WORK_END_TIME);
}

// 计算倒计时剩余时间
public void calculateRemainingTime(LocalDateTime currentTime) {
// 如果任务创建时间在上班时间内,开始倒计时
if (isWithinWorkHours(taskCreatedTime)) {
if (isWithinWorkHours(currentTime)) {
// 两个时间都在上班时间内,计算经过的时间
Duration elapsedTime = Duration.between(taskCreatedTime, currentTime);
remainingTime = remainingTime.minus(elapsedTime);
} else {
// 如果当前时间超过了下班时间,暂停倒计时,不减少 remainingTime
Duration elapsedWorkTime = Duration.between(taskCreatedTime.toLocalTime(), WORK_END_TIME);
remainingTime = remainingTime.minus(elapsedWorkTime); // 只减去上班时间内的时间
}
}
}

// 获取当前的倒计时状态
public Duration getRemainingTime(LocalDateTime currentTime) {
calculateRemainingTime(currentTime);
return remainingTime;
}

public boolean canDelegate(LocalDateTime currentTime) {
calculateRemainingTime(currentTime);
return !remainingTime.isNegative() && !remainingTime.isZero();
}

public static void main(String[] args) {
// 模拟用户在下午 4 点创建了一条任务
LocalDateTime taskCreatedTime = LocalDateTime.of(2024, 10, 17, 16, 0);
TaskDelegateService delegateService = new TaskDelegateService(taskCreatedTime);

// 模拟次日上午 10 点查询倒计时剩余时间
LocalDateTime currentTime = LocalDateTime.of(2024, 10, 18, 10, 0);
Duration remaining = delegateService.getRemainingTime(currentTime);

System.out.println("剩余的委托时间: " + remaining.toMinutes() + " 分钟");
System.out.println("是否还可以委托: " + delegateService.canDelegate(currentTime));
}
}

把你的需求直接复制给了 GPT...
pangliang
3 小时 7 分钟前
根本不需要真正的去做倒计时, 只需要做"剩余时间"计算; 如果"失去委托"真的要做, 那也只是判断 "剩余时间" > 0 而已;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1080694

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX