You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AngularJS中格式化Oracle Timestamp(6)并保留最后三位小数?

解决AngularJS格式化Oracle Timestamp(6) 6位小数精度问题

AngularJS内置的date过滤器仅支持到毫秒级(三位小数),无法直接处理Oracle Timestamp(6)的6位微秒精度。要完整保留并格式化这类时间,需要自定义过滤器实现。

方案一:直接解析Oracle原始时间字符串

如果后端返回的是Oracle原生格式(如07-APR-20 12.37.00.795753000),可以通过自定义过滤器直接拆分解析字符串,避免Date对象截断微秒:

angular.module('yourApp')
  .filter('dateWithMicro', function() {
    return function(input) {
      if (!input) return '';
      
      // 拆分日期与时间部分
      const [dateSegment, timeSegment] = input.split(' ');
      // 映射月份缩写到数字
      const monthMap = {
        JAN: 0, FEB: 1, MAR: 2, APR: 3, MAY: 4, JUN: 5,
        JUL: 6, AUG: 7, SEP: 8, OCT: 9, NOV: 10, DEC: 11
      };
      
      // 解析日期部分:DD-MMM-YY
      const [day, monthAbbr, year] = dateSegment.split('-');
      const fullYear = `20${year}`;
      const month = String(monthMap[monthAbbr] + 1).padStart(2, '0');
      const formattedDay = day.padStart(2, '0');
      
      // 解析时间部分:HH.MM.SS.MICROSECONDS
      const [hours, minutes, seconds, microFull] = timeSegment.split('.');
      const formattedHours = hours.padStart(2, '0');
      const formattedMinutes = minutes.padStart(2, '0');
      const formattedSeconds = seconds.padStart(2, '0');
      // 截取前6位有效微秒
      const micro = microFull.substring(0, 6);
      
      // 拼接成目标格式
      return `${fullYear}-${month}-${formattedDay} ${formattedHours}:${formattedMinutes}:${formattedSeconds}.${micro}`;
    };
  });

在视图中使用:

{{ oracleTimestamp | dateWithMicro }}

方案二:基于ISO格式字符串优化

如果后端可以将Timestamp(6)转换为ISO格式(如2020-04-07T12:37:00.795753Z),过滤器可以更简洁:

angular.module('yourApp')
  .filter('dateWithMicro', function() {
    return function(input) {
      if (!input) return '';
      
      // 拆分日期时间与微秒部分
      const [dateTimePart, microPart] = input.split('.');
      // 格式化日期时间为yyyy-MM-dd HH:mm:ss
      const formattedDateTime = new Date(dateTimePart)
        .toISOString()
        .slice(0, 19)
        .replace('T', ' ');
      // 拼接6位微秒
      return `${formattedDateTime}.${microPart.substring(0, 6)}`;
    };
  });

关键注意事项

  • 确保后端返回的时间格式稳定,过滤器的解析逻辑需与格式完全匹配;
  • JavaScript原生Date对象仅支持毫秒精度,因此必须通过直接截取原始字符串的微秒部分来保留6位精度,避免Date对象截断数据。

内容的提问来源于stack exchange,提问作者user1169587

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:22:47