Files

222 lines
5.9 KiB
JavaScript
Raw Permalink Normal View History

2026-05-23 22:10:14 +08:00
// ================================================================
//
// 桥接 时间快捷接口
//
// ================================================================
// 时间秒数
const SecsMinute = 60;
const SecsHour = SecsMinute * 60;
const SecsDay = SecsHour * 24;
const SecsWeek = SecsDay * 7;
// 导出
module.exports = {
// 本地化日期字符串
// _time: 秒级时间戳
// _odate: 输出日期 2023/6/9
// _otime: 输出时间 14:26:11
// 完整格式: 2023/6/9 14:26:11
toLocalString: function( _time, _odate = true, _otime = true ) {
// 两位数修正
let two = function( _val ) {
let val = "" + Math.floor( _val );
return val.padStart( 2, "0" );
};
let s1 = "";
let s2 = "";
// 输出日期
let time = new Date( _time * 1000 );
if( _odate ) {
s1 = time.getFullYear() + "/" +
two( time.getMonth() + 1 ) + "/" +
two( time.getDate() );
if( !_otime ) {
return s1;
}
}
// 输出时间
if( _otime ) {
s2 = two( time.getHours() ) + ":" +
two( time.getMinutes() ) + ":" +
two( time.getSeconds() );
if( !_odate ) {
return s2;
}
}
// 完整日期
return s1 + " " + s2;
},
// 本地化月日
// _time: 秒级时间戳
// 返回: N月M日
toLocalMD: function( _time ) {
let time = new Date( _time * 1000 );
return nx.text.format( "SMD", time.getMonth() + 1, time.getDate() );
},
// 早先日期的描述
// _time: 秒级时间戳
// 返回: xxx之前
toDescAgo: function( _time ) {
let now = new Date();
let time = new Date( _time * 1000 );
if( time > now ) {
nx.warn( "接口调用错误,请检查!" );
return this.toLocalString( _time );
}
// 超过一年
let dt = Math.floor( ( now - time ) / 1000 );
let days = dt / SecsDay;
let years = now.getFullYear() - time.getFullYear();
if( days > 350 && years > 0 ) {
// 几年前
if( years < 3 ) {
return nx.text.format( "AgoSYear", nx.text.getKey( "Num" + years ) );
}
// 很久以前
return nx.text.getKey( "AgoLongTime" );
}
// 刚刚
let minutes = dt / SecsMinute;
if( minutes < 1 ) {
return nx.text.getKey( "AgoJustNow" );
}
// 未满一小时
let hours = dt / SecsHour;
if( hours < 1 ) {
return nx.text.format( "AgoSMinute", Math.floor( minutes ) );
}
// 未满一天
if( days < 1 ) {
return nx.text.format( "AgoSHour", Math.floor( hours ) );
}
// 未满一周
let weeks = dt / SecsWeek;
if( weeks < 1 ) {
return nx.text.format( "AgoSDay", Math.floor( days ) );
}
if( weeks > 1 ) {
return nx.text.format( "AgoSDay", Math.floor( days ) );
}
// 详细时间
return this.toLocalString( _time );
},
// 所需时间描述
// _seconds: 总秒数
// 返回: xx天xx小时xx分xx秒
toNeedSeconds: function( _seconds ) {
// 无效
if( !nx.dt.numPositive( _seconds, false ) ) {
return nx.text.format( "SSecond", 0 );
}
let days = _seconds / SecsDay;
let hours = ( _seconds % SecsDay ) / SecsHour;
let mins = ( _seconds % SecsHour ) / SecsMinute;
let secs = _seconds % SecsMinute;
let txt = "";
if( days >= 1 ) { txt += nx.text.format( "SDays", Math.floor( days ) ) };
if( hours >= 1 ) { txt += nx.text.format( "SHour", Math.floor( hours ) ) };
if( days < 1 ) { txt += nx.text.format( "SMinute", Math.floor( mins ) ); };
if( hours < 1 ) { txt += nx.text.format( "SSecond", Math.floor( secs ) ); };
return txt || nx.text.format( "SSecond", 0 );
},
// 所需时间描述
// _time: 秒级时间戳
// 返回: xx天xx小时xx分xx秒
toNeedTime: function( _time ) {
let now = Math.floor( cc.sys.now() / 1000 );
return this.toNeedSeconds( _time - now );
},
// 时间倒计时
// _seconds: 总秒数
// 返回: xx:xx:xx
cdSeconds: function( _seconds ) {
// 无效
if( !nx.dt.numPositive( _seconds, false ) ) {
return "00:00:00";
}
let hours = _seconds / SecsHour;
let mins = ( _seconds % SecsHour ) / SecsMinute;
let secs = _seconds % SecsMinute;
let two = function( _val ) {
let val = "" + Math.floor( _val );
return val.padStart( 2, "0" );
};
return nx.text.format( "%s:%s:%s", two( hours ), two( mins ), two( secs ) );
},
// 日期倒计时
// _time: 秒级时间戳
// 返回: xx:xx:xx
cdDate: function( _time ) {
let now = Math.floor( cc.sys.now() / 1000 );
return this.cdSeconds( _time - now );
},
// 返回简化倒计时
cdSimple: function( _time ) {
// 已经过期
let now = Math.floor( cc.sys.now() / 1000 );
let secs = _time - now;
if( secs <= 0 ) {
return "";
}
// 天数
let days = secs / SecsDay;
if( days > 1 ) {
return nx.text.format( "SDay", Math.ceil( days ) );
}
// 小时
let hours = ( secs % SecsDay ) / SecsHour;
if( hours > 1 ) {
return nx.text.format( "SHour", Math.ceil( hours ) );
}
// 分钟
let mins = ( secs % SecsHour ) / SecsMinute;
if( mins > 1 ) {
return nx.text.format( "SMinute", Math.ceil( mins ) );
}
// 秒
secs = secs % SecsMinute;
return nx.text.format( "SSecond", secs );
},
}