js中使用new Date("yyyy-mm-dd hh:mm:ss ")结果为invalid date解决办法

问题描述: ios 中 使用  value = "2019-04-03 12:04:21"

     结果为   NaN- NaN- NaN  NaN:NaN:NaN

     因为不同的浏览器还是存在差异的,有的不能识别

解决方法  :将 - 替换成  /

function formatTime(value) {
  //解决invalid date value
= value.replace(new RegExp(/-/gm) ,"/"); var date = new Date(value); console.log(date); Y = date.getFullYear(), m = date.getMonth() + 1, d = date.getDate(), H = date.getHours(), i = date.getMinutes(), s = date.getSeconds(); if(m < 10) { m = '0' + m; } if(d < 10) { d = '0' + d; } if(H < 10) { H = '0' + H; } if(i < 10) { i = '0' + i; } if(s < 10) { s = '0' + s; } var t = Y + '-' + m + '-' + d + ' ' + H + ':' + i + ':' + s; return t; }

 

转载于:https://www.cnblogs.com/zhou-pan/p/10648331.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照如下步骤实现: 1. 将工作时段字符串分割成多个时间段,每个时间段存储为一个包含开始时间和结束时间的数组。 2. 遍历每个时间段,判断指定日期是否在该时间段内。若在,则计算该时间段内工作了多少分钟,并累加到总工作分钟数。 3. 返回总工作分钟数。 以下是一个可能的实现方式: ```java import java.text.SimpleDateFormat; import java.util.Date; public class DeviceWorkTimeCalculator { // 时间段分隔符 private static final String TIME_RANGE_SEPARATOR = ";"; // 时间格式 private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); /** * 计算指定日期在设备工作时段内的工作分钟数 * * @param workTimeStr 设备工作时段字符串,格式为"HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm" * @param workStartTime 设备工作开始日期时间 * @param workEndTime 设备工作结束日期时间 * @param targetDate 指定日期 * @return 工作分钟数 */ public static int calculateWorkMinutes(String workTimeStr, Date workStartTime, Date workEndTime, Date targetDate) { int workMinutes = 0; // 将工作时段字符串分割成多个时间段 String[] timeRanges = workTimeStr.split(TIME_RANGE_SEPARATOR); for (String timeRange : timeRanges) { // 解析开始时间和结束时间 String[] split = timeRange.split("-"); Date startTime = parseTime(split[0]); Date endTime = parseTime(split[1]); // 计算指定日期在该时间段内的工作分钟数 if (isDateInRange(targetDate, workStartTime, workEndTime) && isTimeInRange(targetDate, startTime, endTime)) { workMinutes += calculateMinutesBetween(targetDate, startTime, endTime); } } return workMinutes; } /** * 解析时间字符串为Date对象 * * @param timeStr 时间字符串,格式为"HH:mm" * @return Date对象 */ private static Date parseTime(String timeStr) { try { return TIME_FORMAT.parse(timeStr); } catch (Exception e) { throw new IllegalArgumentException("Invalid time string: " + timeStr); } } /** * 判断指定日期是否在工作日期范围内 * * @param date 指定日期 * @param workStartTime 工作开始日期时间 * @param workEndTime 工作结束日期时间 * @return true表示在范围内,false表示不在范围内 */ private static boolean isDateInRange(Date date, Date workStartTime, Date workEndTime) { return date.compareTo(workStartTime) >= 0 && date.compareTo(workEndTime) <= 0; } /** * 判断指定时间是否在时间段内 * * @param date 指定日期 * @param startTime 时间段开始时间 * @param endTime 时间段结束时间 * @return true表示在时间段内,false表示不在时间段内 */ private static boolean isTimeInRange(Date date, Date startTime, Date endTime) { return date.getTime() - startTime.getTime() >= 0 && endTime.getTime() - date.getTime() >= 0; } /** * 计算指定日期在时间段内的工作分钟数 * * @param date 指定日期 * @param startTime 时间段开始时间 * @param endTime 时间段结束时间 * @return 工作分钟数 */ private static int calculateMinutesBetween(Date date, Date startTime, Date endTime) { long startMillis = startTime.getTime(); long endMillis = endTime.getTime(); long targetMillis = date.getTime(); // 如果指定日期在开始时间之前,则以开始时间为准 if (targetMillis < startMillis) { targetMillis = startMillis; } // 如果指定日期在结束时间之后,则以结束时间为准 if (targetMillis > endMillis) { targetMillis = endMillis; } // 计算工作分钟数 return (int) ((targetMillis - startMillis) / 1000 / 60); } } ``` 使用示例: ```java // 设备工作时段字符串 String workTimeStr = "08:00-12:00;13:00-17:00;19:00-22:00"; // 设备工作开始时间和结束时间 Date workStartTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-07-01 08:00:00"); Date workEndTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-07-31 22:00:00"); // 指定日期 Date targetDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-07-06 10:30:00"); // 计算工作分钟数 int workMinutes = DeviceWorkTimeCalculator.calculateWorkMinutes(workTimeStr, workStartTime, workEndTime, targetDate); System.out.println("工作分钟数:" + workMinutes); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值