一、使用内部函数
1.1 效果展示

=TEXT(((RIGHT(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"),LEN(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"))-FIND(".",TEXT(B2,"yyyy-mm-dd hh:mm:ss.000")))-RIGHT(TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"),LEN(TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"))-FIND(".",TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"))))+(LEFT(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"),FIND(".",TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"))-1)-LEFT(TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"),FIND(".",TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"))-1))*86400000)/86400000,"[h]:m:S.000")
其中:
-
B2结束时间 -
A2开始时间 - 单元格式:
yyyy-mm-dd hh:mm:ss.000

1.2 步骤分解
| 步骤 | 开始时间 | 结束时间 |
|---|---|---|
[B2]2023-09-10 10:22:24.333 | [C2]2023-09-11 10:22:23.222 | |
| 1.将时间转为字符串 | [B3]2023-09-10 10:22:24.333 | [C3]2023-09-11 10:22:23.222 |
| 2.获取字符串长度 | [B4]23 | [C4]23 |
| 3.获取毫秒中·位置序号 | [B5]20 | [C5]20 |
| 4.截取日期+时间 | [B6]2023-09-10 10:22:24 | [C6]2023-09-11 10:22:23 |
| 5.截取毫秒 | [B7]333 | [C7]222 |
| 6.获取日期时间差(天) | [B8]0.999988426 | |
| 7.获取毫秒差 | [B9]-111 | |
| 8.日期时间差(天)转为日期时间差(毫秒) | [B10]86399000 | |
| 9.合并日期时间差(毫秒)与毫秒差 | [B11]86398889 | |
| 10.日期时间差(毫秒)转为日期时间差(天) | [B12]0.999987141 | |
| 11.日期时间差(天)格式化 | [B13]23:59:58.889 |
- 1.将时间格式转为字符串 ——
=TEXT(B2,"yyyy-mm-dd hh:mm:ss.000")|=TEXT(C2,"yyyy-mm-dd hh:mm:ss.000") - 2.获取
字符串长度——=LEN(B3)|=LEN(C3) - 3.获取
毫秒分隔符(·)位置序号——=FIND(".",B3)|=FIND(".",C3) - 4.截取
日期时间——=LEFT(B3,B5-1)|=LEFT(C3,C5-1) - 5.截取
毫秒——=RIGHT(B3,B4-B5)|=RIGHT(C3,C4-C5) - 6.计算
日期时间差(天)——=C6-B6 - 7.计算
毫秒差——=C7-B7 - 8.
日期时间差(天)转为日期时间差(毫秒)——=B8*86400000 - 9.累计
日期时间差(毫秒)与毫秒差——=B10+B9 - 10.
日期时间差(毫秒)转为日期时间差(天)——=B11/86400000 - 11.
日期时间差(天)格式化 ——=TEXT(B12,"[h]:m:S.000")
二、使用自定义函数
2.1 WPS使用js进行函数编程
2.1.1 将文件另存为 启用宏的工作簿(*.xlsm)

2.1.2 自定义函数DiffDate
使用快捷键Alt+F11弹出WPS 宏编辑器并添加自定义函数

代码
/**
* DiffDate Macro
* @param {Date} start
* @param {Date} end
*/
function DiffDate(start,end)
{
start1= start.Text;
end1= end.Text;
var milliSecondsStart = 0;
if(start1.includes("."))
{
var startLst1 =start1.split(".");
var startdate1 = startLst1[0];
var startms1 = startLst1[1];
var dateObj1 = new Date(startdate1);
var t1 = parseInt(startms1);
milliSecondsStart = dateObj1.getTime() + t1;
}
else
{
var dateObj1 = new Date(start1);
milliSecondsStart = dateObj1.getTime();
}
var milliSecondsEnd = 0;
if(end1.includes("."))
{
var endLst1 = end1.split(".");
var enddate1 = endLst1[0];
var endms1 = endLst1[1];
var dateObj2 = new Date(enddate1);
var t2 = parseInt(endms1);
milliSecondsEnd = dateObj2.getTime() + t2;
}
else
{
var dateObj2 = new Date(end1);
milliSecondsEnd = dateObj2.getTime();
}
var milliSeconds = milliSecondsEnd - milliSecondsStart;
var pre = "";
if(milliSeconds<0)
{
milliSeconds = -milliSeconds;
pre ="-"
}
var hours = Math.floor(milliSeconds / 3600000);
var minutes = Math.floor((milliSeconds % 3600000) / 60000);
var seconds = Math.floor(((milliSeconds % 3600000) % 60000) / 1000);
var milliseconds = milliSeconds % 1000;
var timeStr =pre + hours.toString() + ":" + ("00" + minutes.toString()).slice(-2) + ":" + ("00" + seconds.toString()).slice(-2) + "." + ("000" + milliseconds.toString()).slice(-3);
return timeStr;
}
2.1.3 在工作簿中使用DiffDate函数
=DiffDate(A2,B2)

2.2 Office 使用VBA进行函数编程
因为没有安装Office,此处需要读者自行按照wps逻辑进行类似编程
扩展阅读
【办公-excel】两个时间相减


















