javascript - 计算两个日期时间对象或字符串之间的天数的最佳方法是什么?
问题描述
我有一个应用程序,允许用户预订假期/请假。它目前只允许日期输入并将日期作为日期对象存储在数据库中。但是,我需要添加用户预订半天的功能。我目前使用moment-business-days包来计算要带回/回馈给用户的假期数量。
我想到的一个想法是为 start_time 和 end_time 创建两个新字段,并且只允许用户选择 8:00 或 12:00 作为开始时间,并选择 12:00 或 17:00 作为开始时间时间结束。然后我会做类似下面的事情来计算总金额:
const m1 = moment('{admission}', 'DD-MM-YYYY HH:mm');
const m2 = moment('{discharge}', 'DD-MM-YYYY HH:mm');
const m3 = m2.diff(m1,'minutes');
const numdays = Math.floor(m3 / 1440);
const numhours = Math.floor((m3 % 1440) / 60);
const numminutes = Math.floor((m3 % 1440) % 60);
const total = numdays + " day(s) " + numhours +"h " + numminutes +"m";
但是,如您所见,这将输出总天数、小时数和分钟数。我需要输出为整数或 0.5(例如 5 或 5.5)
谁能想到更好的解决方案?
解决方案
我会使用常规的 Unix 时间戳,除以 1000 * 60 * 60 * 24,然后根据结果四舍五入。就像是
let date1 = new Date(2010, 6, 26, 11).getTime()
let date2 = new Date(2010, 6, 31).getTime()
let result;
let floatingDays = (date2 - date1) / (1000 * 60 * 60 * 24)
if (floatingDays % 1 === 0.5){
result = floatingDays
} else if(floatingDays % 1 > 0.5){
result = Math.ceil(floatingDays)
} else {
result = Math.floor(floatingDays)
}
console.log(result)
当然,您需要确保date2
大于date1
,诸如此类的事情
推荐阅读
- java - 添加WebServlet注解后服务器未启动
- node.js - 将同一文件的多个 blob 合并为一个以获取原始 pdf 文件
- angular - 为什么在 JBOSS 服务器上的浏览器 Angular 7 中手动刷新 URL 时页面显示 404?
- objective-c - FMDB/SQLCipher 和 FMDBMigrationManager 迁移失败
- c++ - 如何使用 wchar_t 为 fmt 编写格式化程序?
- powershell - Powershell 2.0 中的 Get-FileHash 命令
- php - 如何在 Wordpress 中只获取类别的图片 url?
- azure-powershell - Get-AzScheduledQueryRule azurerm 的相同功能脚本是什么
- php - 无法在php中提取pdf文件的内容
- ios - 如何正确地将 Swift 错误与 NSError 的参数联系起来