js脚本生成微信日期格式:刚刚、 时分、昨天、 星期几、年\月\日,想要一段php版本的

有需要自取,
有兴趣的把来一段 php 版本的
要格式符合: 刚刚(60s或者自定义时长)、时分(今天)、昨天、 星期几(一周内)、年\月\日 这样格式的即可

var time_stamp_1 = new Date().getTime();
console.log(time_stamp_1)
var time_stamp = Date.now();
//
function getTimeStringAutoShort2(timestamp, mustIncludeTime){
    // 当前时间
    var currentDate = new Date();
    // 目标判断时间
    var srcDate = new Date(parseInt(timestamp));

    var currentYear = currentDate.getFullYear();
    var currentMonth = (currentDate.getMonth()+1);
    var currentDateD = currentDate.getDate();

    var srcYear = srcDate.getFullYear();
    var srcMonth = (srcDate.getMonth()+1);
    var srcDateD = srcDate.getDate();

    var ret = "";

    // 要额外显示的时间分钟
    var timeExtraStr = (mustIncludeTime?" "+_formatDate(srcDate, "hh:mm"):"");

    // 当年
    if(currentYear == srcYear) {
            var currentTimestamp = currentDate.getTime();
            var srcTimestamp = timestamp;
            // 相差时间(单位:毫秒)
            var deltaTime = (currentTimestamp-srcTimestamp);

            // 当天(月份和日期一致才是)
            if(currentMonth == srcMonth && currentDateD == srcDateD) {
            // 时间相差60秒以内
            if(deltaTime < 60 * 1000)
                    ret = "刚刚";
            // 否则当天其它时间段的,直接显示“时:分”的形式
            else
                    ret = _formatDate(srcDate, "hh:mm");
            }
            // 当年 && 当天之外的时间(即昨天及以前的时间)
            else {
                    // 昨天(以“现在”的时候为基准-1天)
                    var yesterdayDate = new Date();
                    yesterdayDate.setDate(yesterdayDate.getDate()-1);

                    // 前天(以“现在”的时候为基准-2天)
                    var beforeYesterdayDate = new Date();
                    beforeYesterdayDate.setDate(beforeYesterdayDate.getDate()-2);

                    // 用目标日期的“月”和“天”跟上方计算出来的“昨天”进行比较,是最为准确的(如果用时间戳差值
                    // 的形式,是不准确的,比如:现在时刻是2019年02月22日1:00、而srcDate是2019年02月21日23:00,
                    // 这两者间只相差2小时,直接用“deltaTime/(3600 * 1000)” > 24小时来判断是否昨天,就完全是扯蛋的逻辑了)
                    if(srcMonth == (yesterdayDate.getMonth()+1) && srcDateD == yesterdayDate.getDate())
                            ret = "昨天"+timeExtraStr;// -1d
                    // “前天”判断逻辑同上
                    else if(srcMonth == (beforeYesterdayDate.getMonth()+1) && srcDateD == beforeYesterdayDate.getDate())
                            ret = "前天"+timeExtraStr;// -2d
                    else{
                            // 跟当前时间相差的小时数
                            var deltaHour = (deltaTime/(3600 * 1000));

                            // 如果小于或等 7*24小时就显示星期几
                            if (deltaHour <= 7*24){
                            var weekday=new Array(7);
                            weekday[0]="星期日";
                            weekday[1]="星期一";
                            weekday[2]="星期二";
                            weekday[3]="星期三";
                            weekday[4]="星期四";
                            weekday[5]="星期五";
                            weekday[6]="星期六";

                            // 取出当前是星期几
                            var weedayDesc = weekday[srcDate.getDay()];
                            ret = weedayDesc+timeExtraStr;
                            }
                            // 否则直接显示完整日期时间
                            else
                            ret = _formatDate(srcDate, "yyyy/M/d")+timeExtraStr;
                    }
            }
    }
    // 往年
    else{
            ret = _formatDate(srcDate, "yyyy/M/d")+timeExtraStr;
    }

    return ret;
}; 
// 


/**
* 对Date的扩展,将 Date 转化为指定格式的String。
*
*  月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
*  年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)。
*
*  【示例】:
*  common.formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss.S') ==> 2006-07-02 08:09:04.423
*  common.formatDate(new Date(), 'yyyy-M-d h:m:s.S')      ==> 2006-7-2 8:9:4.18
*  common.formatDate(new Date(), 'hh:mm:ss.S')            ==> 08:09:04.423
*  
*  @author 即时通讯网([url=http://www.52im.net]http://www.52im.net[/url])
*/
var _formatDate = function (date, fmt) {
    var o = {
            "M+": date.getMonth() + 1, //月份
            "d+": date.getDate(), //日
            "h+": date.getHours(), //小时
            "m+": date.getMinutes(), //分
            "s+": date.getSeconds(), //秒
            "q+": Math.floor((date.getMonth() + 3) / 3), //季度
            "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
                    return fmt;
};  
console.log(getTimeStringAutoShort2(Date.parse('2023-05-15 10:10:10')))
console.log(getTimeStringAutoShort2(Date.parse('2023-05-10 10:10:10')))
console.log(getTimeStringAutoShort2(Date.parse('2023-05-01 10:10:10')))
本作品采用《CC 协议》,转载必须注明作者和本文链接
reading
白小二
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

直接用Carbon包吧,挺成熟了,你说的这个都有

11个月前 评论
白小二 (楼主) 11个月前
sanders 11个月前
半人间 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!