鸿蒙-JS-第二周day03字符串

字符串

一、字符串的方法

@1、charAt

通过下标去取值

var str = 'chengxiaohui';
// 通过下标取值
var res = str.charAt(0);//"c"
// 如果找不到,返回值是空串
var res2 = str.charAt(12);//""
// 如果直接是索引去取值,找不到,返回是undefined
var res3 = str[12];//undefined

@2、charCodeAt

通过下标取值对应的ascii码值

var str = 'chengxiaohui';
// 通过下标取值
var res = str.charCodeAt(0);//99   "c"==>ASCII码
console.log(res);//99

@3、indexOf/lastIndexOf

第一个参数:找的内容

第二个参数:开始找的位置(indexOf)/找到哪终止(lastIndexOf)

一个参数的情况indexOf

var str = 'chengxiaohui';
// 一个参数,在整个字符串中找
var res = str.indexOf("x");
// 返回值是找到的下标
console.log(res);//5  

lastIndexOf

var str = 'chengxiaohui';
// 一个参数,在整个字符串中找最后一次出现的下标
var res = str.lastIndexOf("h");
// 返回值是找到的下标
console.log(res);//9 

两个参数的情况:indexOf

var str = 'chengxiaohui';
// 从下标5开始找,找"h"
var res = str.indexOf("h",5);
// 返回值是找到的下标
console.log(res);//9 

lastIndexOf

var str = 'chengxiaohui';
// 截止到下标5,找"h"
var res = str.lastIndexOf("h",5);
// 返回值是找到的下标
console.log(res);//1  

@4、slice

作用:查找字符串中特定位置的字符

参数:(n,m)

n:起始索引(包含), m结束索引(不包含)

返回值:查找的字符

  • 从索引n(包括)开始查找到索引m(不包含)结束的字符
  • 如果索引m不写,就是查找到最后
  • 如果n只写一个0,或者不写就是复制一份
  • 也可以为负数,转换成正数的规律:str.length+负的索引值
var str="zhufengpeixun"

str.slice(1,3)    ===>"hu"

str.slice(0)      ===>复制一份
str.slice()       ===>复制一份 


var res=str.slice(-3,-1);   ===>“xu” 

@4.1、substring(n,m)

 subString  和slice 基本都一样,唯一不同在于,subString 不支持负数索引,而slice支持负数索引

@4.2、substr(n,m)
  • 作用:从索引n开始截取m个字符
  • 参数:n,m(个数)
  • 返回值:截取的字符串
  • 也支持从负索引开始

var str="zhufengu";

var res=str.substr(-3,2);  ====>"ng"

@5、 toUpperCase()

toUpperCase(); 把字符串转换为大写

@6、 toLowerCase()

toLowerCase(); 把字符串转换为小写

@7、 replace()

  • 作用:把字符串中某部分的字符替换成另一部分字符
  • 参数:(str1,str2)第一个参数代表的是要替换的字符或者是正则;第二个参数代表的是替换后的字符
  • 返回值:替换后的字符串

var str="zhu2018zhu2019zhu";

var res=str.replace("zhu","珠");   
//===>"珠2018zhu2019zhu"

var res=str.replace(/zhu/g,"珠");

console.log(res)===>"珠2018珠2019珠"

@8、split()

  • 作用:按照指定的字符把字符串分割成数组
  • 参数:分割符
  • 返回值:分割后的数组

split  和 join 对比记忆

 var str="1-2-3";

 var res=str.split("-");
 
 console.log(res); ===>  ["1", "2", "3"]

二、练习题

1【时间字符串处理】把下面的字符串变成 "2019年08月18日 12时32分18秒"

var str="2019-8-18 12:32:18";
//var res=str.split(/-| |:/g)

var time=str.split(" ");
console.log(time) //["2019-8-18", "12:32:18"]
var timeLeft=time[0];
var timeRight=time[1];
var ary1=timeLeft.split("-"); // ["2019", "8", "18"]
var ary2=timeRight.split(":");// ["12", "32", "18"]

var result=ary1[0]+"年"+ary1[1]+"月"+ary1[2]+"日"+" "+ary2[0]+"时"+ary2[1]+"分"+ary2[2]+"秒" 
console.log(result) //"2019年8月18日 12时32分18秒"

/* 
  补零
*/


function zero(num){
    return num<10?"0"+num:num;
}
var ss=zero(11);

var result=zero(ary1[0])+"年"+zero(ary1[1])+"月"+zero(ary1[2])+"日"+" "+zero(ary2[0])+"时"+zero(ary2[1])+"分"+zero(ary2[2])+"秒" 

//"2019年08月18日 12时32分18秒"

2、queryURLParams 问号参数处理

 /* 
        var  str ="https://www.baidu.com?name=feng&age=10&id=14";
        {
            name:"feng",
            age:10,
            id:14
        }
       */


      function urlParams(str){
          var obj={};
          var paramsStr=str.split("?")[1];
          if(paramsStr){
              //[name=feng,age=10,id=14]
              var paramsAry=paramsStr.split("&");
              for(var i=0;i<paramsAry.length;i++){
                    //name=feng
                   var item=paramsAry[i];
                   //[name,feng]
                   var itemAry=item.split("=");
                   obj[itemAry[0]]=itemAry[1];
              }
          }
          return obj;
      }
      var  str ="https://www.baidu.com?name=feng&age=10&id=14";
      var result= urlParams(str);

三、Math常用的方法

Math 称之为数学函数,它也是对象类型数据,主要是用来操作数字的

1)Math.abs()  求绝对值

Math.abs(-1)

2)Math.ceil/Math.floor 向上取整,向下取整

向上取整,无论是正数还是负数,都取最大的值

向下取整,无论是正数还是负数,都取最小的值

Math.ceil(1.2)
2
Math.ceil(-1.6)
-1

Math.floor(1.8)
1
Math.floor(-1.1)
-2

3)Math.round() 四舍五入

正数的话,还是正常的,之前理解的,但是如果是负数,临界点必须大于5

Math.round(1.5)
2
Math.round(-1.5)
-1
Math.round(-1.51)
-2

4)Math.sqrt() 开平方

Math.sqrt(9)
3

5)Math.pow(n,m) 取幂

n的m次幂

Math.pow(3,2)   ==> 9

6)Math.PI

Math.PI  ===>3.141592653589793

7)Math.max/Math.min   获取最大值和最小值

Math.max(1,2,3)
Math.min(4,5,6)

8)Math.random() 获取0~1 之间的随机数(大于等于0,小于1)

获取n 到m 之间的随机数:Math.random()*(m-n)+n;

// 获取10 到20 之间的随机数

Math.random()*10+10

[升级版2]

如果传的实参中包含字符串,就变成数字,如果是非有效数字,就直接略过

function fn(){
   var total=0;
   for(var i=0;i<arguments.length;i++){
       var item=Number(arguments[i]);
       isNaN(item)?0:total+=item
   }
   return total;
}

[高级版3:es6]

function fn(...arg){
  return eval(arg.filter((item)=>!isNaN(item)).join("+")) 
}
var res=fn(1,2,3,"3","3px");

<think>好的,我需要回答用户关于在ArkTS中将时间戳转换为日期的方法。首先,我得回忆一下ArkTS的基本语法和日期处理相关的API。ArkTS是HarmonyOS的应用开发语言,基于TypeScript,所以应该和TS的日期处理类似。 用户提到了时间戳转换为日期,这通常涉及到使用Date对象。在JavaScript/TypeScript中,可以通过new Date(timestamp)来创建日期对象。ArkTS应该也支持这种方式。时间戳一般是毫秒级的,如果是秒级的话可能需要乘以1000。 接下来,我需要考虑如何格式化日期。Date对象有getFullYear、getMonth等方法,可以获取年月日时分秒。用户可能需要将日期格式化为字符串,比如YYYY-MM-DD HH:mm:ss的形式。这部分需要拼接字符串,或者使用第三方库,不过ArkTS可能内置了相关方法? 另外,用户还问到如何将时间戳传递给日期对象,这应该就是创建Date实例的过程。可能需要提醒时间戳的单位,避免常见错误,比如秒和毫秒的混淆。 然后,我需要查看提供的引用内容,是否有相关的信息。但用户提供的引用主要是关于鼠标事件和回调的,可能和日期处理无关。不过还是要检查一下是否有隐含的信息,比如时间戳参数在事件中的使用,比如引用1中提到的时间戳(timestamp),可能说明事件回调中有时间戳可用,但转换方法还是通用的。 可能需要分步骤说明:1. 创建Date对象;2. 格式化日期。示例代码会很有帮助。比如: let timestamp = 1717020800000; // 假设是毫秒时间戳 let date = new Date(timestamp); 然后获取各个部分,或者使用toLocaleString等方法。 另外,ArkTS是否有自己的日期处理库?比如类似Luxon或date-fns?如果标准库足够的话,可能不需要第三方库。需要确认ArkTS的文档,但由于无法查阅外部资料,只能基于TypeScript的知识来推断。 最后,生成相关问题,可能涉及时间戳的获取、不同时区的处理、格式化选项等。</think>在ArkTS中将时间戳转换为日期可以通过以下步骤实现: ### 1. 时间戳转换为Date对象 使用`new Date()`构造函数直接传入时间戳(单位:毫秒)即可创建日期对象: ```typescript // 假设时间戳为毫秒级(Unix时间戳需先乘以1000) let timestamp: number = 1717020800000; let date: Date = new Date(timestamp); ``` ### 2. 日期格式化输出 通过Date对象方法提取具体时间单位: ```typescript // 获取年月日时分秒 let year = date.getFullYear(); // 2024 let month = date.getMonth() + 1; // 0~11需+1 let day = date.getDate(); // 1~31 let hours = date.getHours(); // 0~23 let minutes = date.getMinutes(); // 0~59 ``` ### 3. 格式化字符串示例 ```typescript // 输出"2024-05-30 08:13:20" let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`; ``` ### 4. 时间戳传递场景 在事件回调中可直接获取时间戳[^1]: ```typescript onClick((event: ClickEvent) => { let eventTimestamp = event.timestamp; // 从事件对象获取时间戳 let clickDate = new Date(eventTimestamp); }) ``` ### 注意事项 - 秒级时间戳需要乘以1000转换为毫秒 - 时区处理需通过`getTimezoneOffset()`调整 - 复杂格式化建议使用`toLocaleDateString()`方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值