js的数字改成大小写

 var stmp = "";
 function nst(t,m){
  if(t.value==stmp) return;
  if(isNaN(t.value)){
   alert("请输入数字");
  }
  else{
   var ms = t.value.replace(/[^\d\.]/g,"").replace(/(\.\d{2}).+$/,"$1").replace(/^0+([1-9])/,"$1").replace(/^0+$/,"0");
   var ms = t.value;
   var txt = ms.split(".");
   while(/\d{4}(,|$)/.test(txt[0]))
    txt[0] = txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2");
   t.value = stmp = txt[0]+(txt.length>1?"."+txt[1]:"");
   //var bbb=document.getElementById("bbb");
   //bbb.value = number2num1(ms-0,t);
   m.val(number2num1(ms-0,t));
  }
 }

 function number2num1(strg,obj){
  var number = Math.round(strg*100)/100;  //取2位小数
  number = number.toString(10).split(".");  //拆分整数和小数部分
  var a = number[0];  //取整数部分
  if (a.length > 12){
   obj.value = obj.value.substring(0,12);
   return "数值超出范围!支持的最大数值为 999999999999.99";
  }
  else{
   var e = "零壹贰叁肆伍陆柒捌玖";
   var num1 = "";
   var len = a.length-1;
   for (var i=0 ; i<=len; i++)
    num1 += e.charAt(parseInt(a.charAt(i))) + [["圆","万","亿"][Math.floor((len-i)/4)],"拾","佰","仟"][(len-i)%4];
    if(number.length==2 && number[1]!=""){  //判断有无小数部分,以下对小数部分进行处理
     var a = number[1];
     for (var i=0 ; i<a.length; i++)
      num1 += e.charAt(parseInt(a.charAt(i))) + ["角","分"][i];
    }
   num1 = num1.replace(/零佰|零拾|零仟|零角/g,"零");
   num1 = num1.replace(/零{2,}/g,"零");
   num1 = num1.replace(/零(?=圆|万|亿)/g,"");
   num1 = num1.replace(/亿万/,"亿");
   num1 = num1.replace(/^圆零?/,"");
   if(num1!="" && !/分$/.test(num1))
    num1 += "整";
//   alert(num1);
   return num1;
  }
 }
 
 function removeQianFenWei(zz)

{
	 alert("122323");
var txtBox=document.getElementById(zz);
txtBox.value=txtBox.value.replace(/,/g,"");//如果是replace(',','')是只替换第一个
alert(txtBox.value);

} 

 

 

 

<think>我们参考了多个引用,特别是引用[1]和引用[2]提供了直接比较时间(时分格式)的方法。 核心思路:将当前时间和指定时间都换成相同日期下的时间对象(或时间戳),然后比较时间戳的大小。 注意:由于我们只关心时间(小时和分钟),不关心日期,所以我们可以将日期设置为同一天(比如当前日期)来比较。 步骤: 1. 获取当前时间(包括小时和分钟)。 2. 将当前时间格式化为HH:mm格式(注意分钟补零)。 3. 将指定时间字符串(假设也是HH:mm格式)拆分成小时和分钟。 4. 创建一个新的Date对象,设置为当前日期,但分别用当前时间的小时分钟和指定时间的小时分钟设置,然后比较这两个Date对象(通过getTime()方法得到时间戳比较)。 但是注意:引用[1]中直接使用setHours方法设置小时和分钟,然后比较两个Date对象(因为setHours会改变Date对象并返回时间戳,所以可以直接比较)。 引用[1]中的代码: date.setHours(now_time_s[0], now_time_s[1]) 返回的是时间戳(毫秒数) date.setHours(end_time_s[0], end_time_s[1]) 返回的是另一个时间戳(注意:这里有一个问题,因为date对象被改变了,所以第二次设置是在第一次设置改变后的日期对象上再改变?这样会导致错误) 实际上,引用[1]中的代码存在一个隐患:因为同一个Date对象被连续设置两次,第一次设置后,第二次设置是在第一次设置的基础上?这显然不对,因为我们要比较的是同一天的两个时间。 改进方法:创建两个Date对象,或者使用同一个日期对象但分别设置并立即比较(但注意连续设置会导致问题,所以最好用两个对象)。 引用[2]中提供的方法也是使用同一个Date对象连续设置,但这样会改变原对象,而且第二次设置会覆盖第一次设置,所以不能同时保留两个时间。因此,正确做法是创建两个Date对象,或者使用两个不同的Date对象。 但是,引用[2]中的函数CompareDate(t1,t2)也是用同一个Date对象连续设置两次,然后比较两次设置后的时间戳?这样显然不对,因为第二次设置会覆盖第一次设置,实际上比较的是第二次设置的时间戳和第一次设置的时间戳(但第二次设置后,date对象已经变成了第二个时间,而第一次设置返回的时间戳是第一个时间的时间戳,但此时date对象已经被改成了第二个时间)。所以,我们需要两个独立的Date对象。 因此,我们采用如下方法: 方法1:使用两个Date对象,分别设置当前日期,然后分别设置各自的时间(小时和分钟),再比较它们的时间戳。 方法2:将两个时间都换成从当天00:00开始的分钟数,然后比较分钟数。 这里我们采用方法1,因为更直观,且与引用[3]中比较时间戳的方法一致。 具体步骤: 1. 获取当前日期对象(作为基准日期,但注意我们只需要日期部分,时间部分会被覆盖)。 2. 创建两个新的Date对象,都复制当前日期(这样保证是同一天)。 3. 将第一个Date对象的时间设置为当前时间(注意:当前时间我们也可以直接用一个Date对象表示,但这里我们是要和指定时间比较,所以当前时间也需要设置到同一个基准日期的Date对象上?其实不需要,因为当前时间就是现在,但指定时间可能是今天的某个时间,所以比较的是今天当前时间和今天指定时间的大小。 但是注意:当前时间就是现在,而指定时间是今天的某个时间(比如18:00),所以我们可以: 将当前时间(包括日期)和指定时间(只取时分)换成同一天的日期对象? 但是当前时间已经是完整的日期时间,而指定时间只有时分,所以我们用当前日期的年月日,加上指定时间的时分,构造一个新的日期对象。 然后比较这两个日期对象(当前时间对象和构造的指定时间对象)的时间戳。 然而,当前时间对象已经是完整的,我们只需要创建一个指定时间对象(使用当前日期的年月日,加上指定时间的时分秒,秒和毫秒可以设为0)。 因此: 当前时间:直接用 new Date() 指定时间:用 new Date() 获取当前日期,然后设置小时和分钟为指定值(秒和毫秒设为0) 然后比较这两个时间戳。 注意:这样比较的是当前时间(包括秒和毫秒)和指定时间(秒和毫秒为0)的大小。如果指定时间只精确到分钟,那么这样比较是合理的。 如果指定时间字符串是"HH:mm"格式,我们可以这样处理: 代码实现: 步骤1:获取当前时间(nowDate) 步骤2:解析指定时间字符串(假设为"HH:mm")得到小时和分钟 步骤3:创建一个新的Date对象(targetDate),使用当前日期的年、月、日,小时和分钟用解析出来的值,秒和毫秒设为0。 步骤4:比较nowDate和targetDate的时间戳(getTime()) 但是注意:这样比较的是当前时间(精确到毫秒)和指定时间(精确到分钟)的大小。如果当前时间在指定时间之后(包括分钟相同但秒和毫秒大于0),那么当前时间就大于指定时间。但通常我们只比较到分钟,所以也可以将当前时间的秒和毫秒设为0,再比较。不过根据需求,一般比较到分钟即可,所以我们可以忽略秒和毫秒,或者将当前时间也精确到分钟(即分钟相同就算相等,不管秒和毫秒)。 根据引用[1]中的做法,他们只比较到分钟,所以我们可以将当前时间的秒和毫秒也设为0?或者不设,因为比较时间戳时,如果当前时间分钟相同但秒不为0,那么当前时间就大于指定时间(因为指定时间秒为0)。这取决于业务需求。 如果业务要求精确到分钟,那么我们可以将当前时间的秒和毫秒归零,然后再比较。或者,我们可以只比较小时和分钟:将小时和分钟分别比较。 但是,分别比较小时和分钟需要写两个判断,而用时间戳比较更简单。所以,我们采用时间戳比较,并且指定时间的秒和毫秒为0,当前时间保留原秒和毫秒(因为当前时间就是精确的),这样比较的结果是: 如果当前时间大于等于指定时间(即当前时间已经过了指定时间),则返回true。 例如:当前时间 18:00:01 大于指定时间 18:00。 如果需求是只要分钟相同就算相等,那么我们需要将当前时间的秒和毫秒归零,然后再比较。 这里我们按照引用[1]的做法,即比较到分钟,但实际比较的是精确时间,所以18:00:01大于18:00。如果需求是分钟相同就算相等,那么我们需要调整。 根据问题描述,用户要求比较当前时间和指定时间的大小,没有说明精度。我们按照常规理解(精确到分钟),即如果当前时间过了指定时间的分钟数(哪怕过了1秒),就算大于。 因此,代码实现如下: 方法一:使用时间戳 let now = new Date(); // 当前时间,精确到毫秒 let target = new Date(); target.setHours(hours); // hours是指定时间的小时 target.setMinutes(minutes); // minutes是指定时间的分钟 target.setSeconds(0, 0); // 秒和毫秒设为0 if (now.getTime() >= target.getTime()) { console.log("当前时间大于等于指定时间"); } else { console.log("当前时间小于指定时间"); } 但是注意,这样创建的target日期对象和now日期对象是同一天,符合要求。 如果指定时间字符串是"HH:mm:ss"格式,我们可以解析出秒,然后设置秒,毫秒设为0。 但是用户的问题中指定时间只有时分,所以我们只解析小时和分钟。 另外,如果指定时间字符串是"HH:mm",我们可以用split(':')来分割。 完整函数: 注意:处理分钟数小于10的情况,在解析时不需要补零,因为split后得到的是字符串,而setMinutes方法可以接受字符串(会自动换为数字)。 但是,如果指定时间字符串的格式可能不统一(比如小时是1位还是2位),我们按照冒号分割,然后取前两位。 代码: 函数:compareCurrentTime(specifiedTime) 参数:specifiedTime 字符串,格式为"HH:mm"(例如"18:00") 步骤: 1. 获取当前时间 now 2. 解析specifiedTime,得到小时和分钟 3. 创建目标时间对象 target(使用当前日期的年月日,小时和分钟为解析值,秒和毫秒设为0) 4. 比较 now 和 target 的时间戳 注意:如果指定时间字符串包含秒,我们可以忽略(或者根据需求调整),但这里用户只要求时分,所以我们不考虑秒。 但是,如果传入的时间字符串可能包含秒,比如"18:00:00",我们可以扩展一下,允许有秒,但只取前两个部分(小时和分钟)。或者,如果格式是"HH:mm:ss",我们可以取前三个部分,但用户问题只要求比较到分钟,所以秒可以忽略。 因此,我们按冒号分割,取前两个部分。 代码示例: 根据上述分析,我们编写如下函数:</think>### JavaScript 比较当前时间与指定时间大小 在 JavaScript 中比较当前时间与指定时间(时分格式)的大小,可以通过以下步骤实现: #### 实现步骤 1. **获取当前时间**:使用 `Date` 对象获取当前的小时和分钟 2. **格式化时间**:确保分钟数始终为两位数(补零) 3. **解析指定时间**:将 "HH:mm" 格式的时间拆分为小时和分钟 4. **创建时间对象**:使用相同日期设置不同时间点 5. **比较时间戳**:通过 `getTime()` 获取毫秒值进行比较 #### 完整代码实现 ```javascript function compareTime(specifiedTime) { // 1. 获取当前时间并格式化 const now = new Date(); const hours = now.getHours(); const minutes = now.getMinutes(); const currentTime = `${hours}:${minutes < 10 ? '0' + minutes : minutes}`; // 2. 解析指定时间 const [specHours, specMinutes] = specifiedTime.split(':').map(Number); // 3. 创建相同日期的两个时间对象 const currentDate = new Date(now); currentDate.setHours(hours, minutes, 0, 0); // 设置当前时间 const specDate = new Date(now); specDate.setHours(specHours, specMinutes, 0, 0); // 设置指定时间 // 4. 比较时间戳 if (currentDate.getTime() > specDate.getTime()) { return `当前时间 ${currentTime} > 指定时间 ${specifiedTime}`; } else if (currentDate.getTime() < specDate.getTime()) { return `当前时间 ${currentTime} < 指定时间 ${specifiedTime}`; } else { return `当前时间 ${currentTime} = 指定时间 ${specifiedTime}`; } } // 示例用法 console.log(compareTime('14:30')); // 输出比较结果 ``` #### 关键点说明 1. **时间格式化**:`${minutes < 10 ? '0' + minutes : minutes}` 确保分钟数始终为两位数 2. **相同日期基准**:使用 `new Date(now)` 创建新对象,保证比较在相同日期进行 3. **时间戳比较**:`getTime()` 返回毫秒值,提供精确比较[^3] 4. **秒数归零**:通过 `setHours(h,m,0,0)` 忽略秒和毫秒的差异 #### 实时监控实现(定时任务) ```javascript function monitorTime(specifiedTime, interval = 5000) { const timer = setInterval(() => { const result = compareTime(specifiedTime); console.log(`[${new Date().toLocaleTimeString()}] ${result}`); }, interval); return timer; } // 启动监控(每5秒检查一次) const monitor = monitorTime('18:00'); // 需要停止时调用 clearInterval(monitor) ``` > **注意**:直接比较时间字符串(如 `"09:30" > "8:45"`)不可靠,因为字符串比较是按字符顺序进行的[^2]。使用时间戳可确保正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值