实现时间显示几天前,几小时前的方法锦集

本文介绍了一种用人类易懂的方式展示两个日期之间差值的方法,包括Java和JavaScript两种语言的具体实现,能够将时间差转化为“几分钟前”、“几小时前”等易于理解的形式。

Java方法:


private final static long minute = 60 * 1000;// 1分钟 
private final static long hour = 60 * minute;// 1小时 
private final static long day = 24 * hour;// 1天 
private final static long month = 31 * day;// 月 
private final static long year = 12 * month;// 年 
/** 
* 返回文字描述的日期 
* 
* @param date 
* @return 
*/
public static String getTimeFormatText(Date date) { 
    if (date == null) { 
      return null; 
    } 
    long diff = new Date().getTime() - date.getTime(); 
    long r = 0; 
    if (diff > year) { 
      r = (diff / year); 
      return r + "年前"; 
    } 
    if (diff > month) { 
      r = (diff / month); 
      return r + "个月前"; 
    } 
    if (diff > day) { 
      r = (diff / day); 
      return r + "天前"; 
    } 
    if (diff > hour) { 
      r = (diff / hour); 
      return r + "个小时前"; 
    } 
    if (diff > minute) { 
      r = (diff / minute); 
      return r + "分钟前"; 
    } 
    return "刚刚"; 
}


JavaScript函数实现:

方法一:

//JavaScript函数:
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var halfamonth = day * 15;
var month = day * 30;
function getDateDiff(dateTimeStamp){
var now = new Date().getTime();
var diffValue = now - dateTimeStamp;
if(diffValue < 0){
 //若日期不符则弹出窗口告之
 //alert("结束日期不能小于开始日期!");
 }
var monthC =diffValue/month;
var weekC =diffValue/(7*day);
var dayC =diffValue/day;
var hourC =diffValue/hour;
var minC =diffValue/minute;
if(monthC>=1){
 result="发表于" + parseInt(monthC) + "个月前";
 }
 else if(weekC>=1){
 result="发表于" + parseInt(weekC) + "周前";
 }
 else if(dayC>=1){
 result="发表于"+ parseInt(dayC) +"天前";
 }
 else if(hourC>=1){
 result="发表于"+ parseInt(hourC) +"个小时前";
 }
 else if(minC>=1){
 result="发表于"+ parseInt(minC) +"分钟前";
 }else
 result="刚刚发表";
return result;
}

若你得到的时间格式不是时间戳,可以使用下面的JavaScript函数把字符串转换为时间戳, 本函数的功能相当于JS版的strtotime:

//js函数代码:字符串转换为时间戳
function getDateTimeStamp(dateStr){
 return Date.parse(dateStr.replace(/-/gi,"/"));
}

方法二:

<script>       
function jsDateDiff(publishTime){       
    var d_minutes,d_hours,d_days;       
    var timeNow = parseInt(new Date().getTime()/1000);       
    var d;       
    d = timeNow - publishTime;       
    d_days = parseInt(d/86400);       
    d_hours = parseInt(d/3600);       
    d_minutes = parseInt(d/60);       
    if(d_days>0 && d_days<4){       
        return d_days+"天前";       
    }else if(d_days<=0 && d_hours>0){       
        return d_hours+"小时前";       
    }else if(d_hours<=0 && d_minutes>0){       
        return d_minutes+"分钟前";       
    }else{       
        var s = new Date(publishTime*1000);       
        // s.getFullYear()+"年";
        return (s.getMonth()+1)+"月"+s.getDate()+"日";       
    }       
}       
</script>



我是一个自来水厂的员工,每天需要调整矾液的需矾量。我想用python通过机器学习建立一个模型,来辅助预测最佳需矾量。我会导入一个结构数据表,表头为时间、原水浊度、原水ph、1#沉淀池流量、1#矾液流量、2#沉淀池流量、2#矾液流量、矾原液密度、矾液浓度、1#需矾量、2#需矾量、1#沉后ph、1#沉后浊度、2#沉后ph、2#沉后浊度、滤后ph、滤后浊度、出水ph、出水浊度。 注意事项: 1.数据表内数据为每时刻数据,投入矾液后实际的效果有滞后性,大约滞后4h会有体现。 2.我提供的数据表是按照间隔4小时的。 3.加矾效果实际上非线性,存在一个最佳值,多了少了都会让效果变差。 4.用于训练模型的数据都是按4小时间隔排列的,这是因为数据经过了筛选,能够确保与4小时后的数据进行对应,但在实际应用是不一定是4小时,因此可视化界面在显示输出结果时,不要用4小时后浊度之类的描述。 5.1#与2#代表两天生产线,在原水刚进来来是一路水,在混凝阶段是两路水,但在滤后与出水段时,两路水会混合在一起,而在混凝阶段也是分开的,因此虽然看似要输出1#需矾量与2#需矾量,好像一个多输出模型,实际上可以对需矾量进行输出,只输出单个参数。 要求功能: 1.有一个可视化界面方便输入参数并观察输出结果(具体指,输入原水浊度、原水ph、1#沉淀池流量、矾原液密度、矾液浓度后输出1#需矾量,输入原水浊度、原水ph、2#沉淀池流量、矾原液密度、矾液浓度后输出2#需矾量,输入原水浊度、原水ph、1#沉淀池流量、2#沉淀池流量、矾原液密度、矾液浓度、1#需矾量、2#需矾量,输出预估的4小时后出厂水浊度,输入原水浊度、原水ph、1#沉淀池流量、2#沉淀池流量、矾原液密度、矾液浓度、目标出厂水浊度,输出预估的1#需矾量、2#需矾量)、绘制目标出厂水浊度与连续的预估需矾量的关系变化曲线(以预估需矾量的值为中心,曲线x轴步长0.5。 例如预估需矾量为9.5,则x轴为8、8.5、9、9.5、10、10.5、11)。 2.同样的数据不用输入两遍,因为在实际工作中,每次使用时1#需矾量和2#需矾量是都要预测的,水质预测有时独立进行,有时和需矾量一起进行,同时原水浊度、原水ph、矾原液密度、矾液浓度都是一样的 3.有一个反馈输入端,按照系统推荐的需矾量实际投加后,记录4小时后的出厂水浊度,将这个浊度输入后,会与此预测的值进行对比,得到一个相近的程度值,并有按钮可以选择是否要将这个实际值收录并用于训练模型。 4.我需要系统记录的反馈数据列表能够以原来表格的格式(时间列就记录时间戳,其余列是空列的,直接删除列)导出,并在可视化界面上加一个导出按钮。 5.我一共有四个水厂,需要对四个水厂分别建模,训练文件的文件名分别为:”JB_water_quality_data.csv“,”GH_water_quality_data.csv“,”LG_water_quality_data.csv“,”THY_water_quality_data.csv“,(北水厂对应JB、高虹水厂对应GH、龙岗水厂对应LG、太湖源水厂对应THY)然后可视化界面需要能够切换水厂,且显示的是中文名。 代码实现思路补充: 大体可以建立三大模型,模型一为需矾量初步预测模型(主要模拟的是当水质下,人的历史加矾规律),输入参数为时间时间用于训练模型时定位,可视化界面端不需要输入)、原水浊度、原水ph、1#沉淀池流量、1#矾液流量、2#沉淀池流量、2#矾液流量、矾原液密度、矾液浓度,输出参数为1#需矾量与2#需矾量。(提醒这个思路下要格外小心我面写的注意事项第五条) 模型二为水质预测模型(模拟当水质与需矾量下,经过滞后的时间输出的出厂水浊度),输入参数为时间时间用于训练模型时定位,可视化界面端不需要输入)、原水浊度、原水ph、1#沉淀池流量、1#矾液流量、2#沉淀池流量、2#矾液流量、矾原液密度、矾液浓度、1#需矾量、2#需矾量。输出参数为出厂水浊度, 模型三是根据水质条件与目标出水浊度倒算需要的投加量(注意:投加量=沉淀池流量*需矾量/1000/矾液浓度)。(input x:00时刻水质参数,y:00时刻出水浊度,output x:00时刻1#投加量2#投加量)(在训练模型时可以认定y==x+4,因为这个数据被筛选过了,但在可视化界面的输入框边上不要显示4小时之类的表达,而是改成出水浊度期望值之类的表达)并根据同一水质条件下,投加量与出水浊度的变化画出曲线,以弹窗的形式呈现。
最新发布
09-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值