一, 時間對象和字符串方法

1, 時間對象

使用時間對象,在不寫入參數的情況下,可以獲取電腦當前這1秒鐘的本地時間

時間對象是一個內置函數,可以直接拿過來使用,是在js底層已經定義好的

Number()  數值
String() 字符串
Boolean() 布爾
Object() 對象
Array() 數組
Function(){}  函數  
Date() 時間
Error() 錯誤
RegExp()正則

2, 獲取本地時間

語法:

// var d = new Date();

獲取年月日

// 獲取年月日
var y = d.getFullYear();
// 當前月份要加 + 1  1月到12月 對應下標值是0-11  
var m = d.getMonth() + 1;
var r = d.getDate();

console.log(y + '年' + m + '月' + r + '日');

時分秒

// 時分秒
var h = d.getHours();  // 小時
var f = d.getMinutes(); // 分鐘
var s = d.getSeconds();   // 秒
console.log(h + '時' + f + '分' + s + '秒');

星期

// 星期 
var week = ['星期天','星期一','星期二','星期三','星期四','星期五','星期六'];
var w = d.getDay();
console.log(week[w]);
console.log(y + '年' + m + '月' + r + '日' + week[w] + h + '時' + f + '分' + s + '秒');

電子時鐘

auto(); // 解決1秒的空白
setInterval(auto, 1000);
function auto() {
    // 獲取本地時間
    var d = new Date(); // 

    // 獲取年月日
    var y = d.getFullYear();
    // 當前月份要加 + 1  1月到12月 對應下標值是0-11  
    var m = d.getMonth() + 1;
    var r = d.getDate();

    // 時分秒
    var h = d.getHours();  // 小時
    var f = d.getMinutes(); // 分鐘
    var s = d.getSeconds();   // 秒

    // 星期 
    var week = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
    var w = d.getDay();

    document.querySelector('body').innerHTML = y + '年' + m + '月' + r + '日' + week[w] + h + '時' + f + '分' + s + '秒'
}

獲取特定時間

console.log(d.toLocaleString());
console.log(d.toLocaleTimeString());
console.log(d.toLocaleDateString());

時間戳

// 時間戳  就是從1970年1月1號 凌晨零點 到現在這個時間的毫秒數
console.log(d.getTime()); // 1600741855080 數值類型  

// 2020年11月11號 - 2020年9月22  

console.log(Date.now()); // 1600742004734

設置未來時間

//  字符串
// 月份正常輸入
var d1 = new Date('2020,11,11 11:11:11');
// console.log(d1.getTime()); //1605064271000
console.log(d1);

//直接輸入時間   月份 - 1  
var d2 = new Date(2020,10,11,11,11,11);
console.log(d2);

時間計算

// 時間計算
var nowTime = new Date(); 
var endTime = new Date('2020,11,11 11:11:11'); 

var leftTime = parseInt((endTime.getTime() - nowTime.getTime()) / 1000); // 秒
console.log(leftTime / (24 * 60 * 60)); // 50

3, 秒殺倒計時

auto(); // 解決1秒的空白

setInterval(auto, 1000)

function auto() {
    // 設置本地時間
    var nowTime = new Date();
    // 設置未來時間
    var endTime = new Date('2020,11,11 11:11:11');

    // 把時間轉化為時間戳,做時間的運算
    var leftTime = parseInt((endTime.getTime() - nowTime.getTime()) / 1000);// 秒

    // 計算 天  時  分  秒 
    var t = parseInt(leftTime / (24 * 60 * 60));
    var h = parseInt((leftTime / (60 * 60)) % 24);
    var m = parseInt((leftTime / 60) % 60);
    var s = parseInt(leftTime % 60);

    document.body.innerHTML = '距離活動開始還有:' + two(t) + '天' + two(h) + '時' + two(m) + '分' + two(s) + '秒';
    // 如果活動結束
    if (leftTime <= 0) {
        document.body.innerHTML = '活動已經開始';
    }
}
// 補0
function two(n){
    return n >= 10 ? n : '0' + n; 
}

二, 字符串對象

字符串

使用單引號或者雙引號引起來的都是字符串

1、使用字面量的方式

var str = '我愛吃大肘子';
var str = '10';
var str = "字符串"
var str = 中國; // 錯誤的

2、使用構造函數

// 使用構造函數創建字符串
var str = new String('abc');
console.log(typeof str);  // object
console.log(str[0]); // 下標
console.log(str.length); // 長度

// 可以直接使用構造函數

var str1 =String('123456');
console.log(typeof str1);  // string
console.log(str1[0]); // 下標
console.log(str1.length); // 長度

可以通過下標讀取字符串

var str = 'abcdefg';

console.log(str[0]); // a
console.log(str.charAt(0)); // a 
console.log(str.charCodeAt(0)); // 97

1, indexOf

語法:字符串.indexOf('查找的字符',index)

'查找的字符':在某一個字符串中需要查找的單個字符或者一串字符

index:是一個number類型,代表的是查找的起始位置,代表的下標值 取值範圍 字符串的長度 - 1

如果查找到了,返回當前查找的字符在字符串中首次出現的位置(下標值)

如果沒找到,返回 -1

console.log(str.indexOf('c')); //  2
// 返回值是第一個字符的下標
console.log(str.indexOf('cd')); // 2
// 所有的字符都是需要匹配的
console.log(str.indexOf('cD')); // -1
// 第二個參數是決定查找的位置
console.log(str.indexOf('c',3)); //  -1

2, 字符串去重

// 需求:去掉重複的,數字在前,字母在後

var str = '1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs';
var num = ''; // 數字
var sum = ''; // 字母

// 先拿到每一個字符
for (var i = 0; i < str.length; i++) {
    var v = str[i]; // 每一個字符  v = '1' v = '2'
    // 數字 48 - 57
    if(v.charCodeAt(0)>=48 && v.charCodeAt(0)<=57 && num.indexOf(v) == -1){
        num+=v;
    }
    // 字母 97-122
    if(v.charCodeAt(0)>=97 && v.charCodeAt(0)<=122 && sum.indexOf(v) == -1){
        sum+=v;
    }
}

console.log(num + sum); //12345fdsarg

3, 查找多個字符

var str = '我就小王12是我顏色小王12不一樣的小王12煙火';

// 找到所有的小王
console.log(str.indexOf('小王')); // 2
console.log(str.indexOf('小王', 4)); // 8
//循環查找
var n = str.indexOf('小王1'); // 2
while(n !==-1){
    console.log(n); // 2 
    n = str.indexOf('小王1', n + 3);
}
// 封裝
fn(str, '小王12'); //函數調用
function fn(str, val) { // str 字符串  val 查找的字符
    var n = str.indexOf(val);
    while (n != -1) {
        console.log(n);
        n = str.indexOf(val, n + val.length);
    }
}

4, 查找某個字符在字符串中出現的次數

// 查找o出現的次數
var str = 'oabcdofrghoooooooooooodefklaoqwpo';
var n = str.indexOf('o');
var num = 0; // 計數

while (n != -1) {
    num++;
    n = str.indexOf('o', n + 1);
}
console.log(num);

5, lastIndexOf

語法:字符串.lastIndexOf('查找的字符',起始位置)

返回值和indexOf相同

indexOf是從前往後查找

lastIndexOf是從後往前查找

// 字符串.lastIndexOf('查找的字符', 起始位置)
var str = 'abcadeafag';

console.log(str.indexOf('a')); // 0
console.log(str.lastIndexOf('j')); // -1

console.log(str.lastIndexOf('a')); // 8

console.log(str.lastIndexOf('a',6)); // 6

6, 打印文件擴展名

// 1.2.3.4.txt
// console.log(fn('1.2.3.4.txt'));
console.log(fn('老韓.liumang'));

function fn(str) {

    var n = str.lastIndexOf('.'); // 7

    if (n != -1) {
        return str.slice(n + 1);
    } else {
        alert('無效的文件');
    }
}

7, 字符串的截取

語法:字符串.substring(起始位置,結束位置)

// 注意:包含開始  不包含結束

var str = 'abcdefg';
// 一個參數的時候,從當前位置一直到結束
console.log(str.substring(2)); //cdefg
// 當兩個參數的時候,從開始位置到結束位置
console.log(str.substring(2,5)); // cde
// 當第一個參數大於第二個參數的時候,會自動交換位置
console.log(str.substring(5,2)); // cde
// 當第一個參數為負數的時候,會默認轉換為 0 
console.log(str.substring(-2,5)); // abcde
// 當第二個參數為負數的時候,默認轉換為 0 然後在自動交換位置
console.log(str.substring(5,-2)); //  abcde

8, 語法:字符串.slice(起始位置,結束位置)

// 注意;包含開始 不包含結束

var str = 'abcdefg';
// 當一個參數的時候,從當前位置截取到末尾
console.log(str.slice(2)); // cdefg
// 當兩個參數的時候,從起始位置截取到結束位置
console.log(str.slice(2,6)); // 
// 當第一個參數大於第二個參數的時候,不會自動交換位置
console.log(str.slice(6,2)); //  空
// 當第一個參數為負數的時候 起始位置的值  = 字符串的長度 + 負數
console.log(str.slice(-3,6)); // ef
// 當第二個參數為負數的時候 起始位置的值  = 字符串的長度 + 負數  
// 如果第二個參數小於第一個參數 不會自動交換為
console.log(str.slice(6,-3)); //

9, 語法:字符串.substr(起始位置,截取的長度)

var str = 'abcdefg';
// 如果是一個參數,從當前位置截取到末尾
console.log(str.substr(2)); // cdefg
// 第二個參數是截取的長度
console.log(str.substr(2,5)); // cdefg

案例 - 展開收縮

// 獲取元素
var span = document.getElementsByTagName('span')[0];
var a = document.getElementsByTagName('a')[0];

var text = span.innerHTML; // 保存原數據
var tag = true; // 展開
// 添加事件

a.onclick = function () {
    if (tag == true) {
        span.innerHTML = span.innerHTML.substring(0, 18) + '...';
        a.innerHTML = '展開';
        tag = false;
    } else {
        span.innerHTML = text + '...';
        a.innerHTML = '收縮';
        tag = true;
    }
}

10, 字符串的切割

語法:字符串.split(切割的字符)

把字符串切割長數組,並返回這個數組

var str = '2020-9-22';

console.log(str.split('-'));
console.log(str.split(''));
console.log(str.split());


// 語法:數組.join(標識符)  把數組轉換成字符串

var arr = ['劉備','張飛','關羽'];
console.log( typeof arr.join(','));

console.log(arr.join(''));

console.log(arr.join());

11, 替換內容

var str = '我是帥哥';
var arr = str.split('是'); //  ["我", "帥哥"]
var str1 = arr.join('不是');
console.log(str1);

12, 查找替換

// 獲取元素
var pt = document.getElementsByTagName('input');
var div = document.getElementById('div1');

var text = div.innerHTML; // 保存原始數據

// 添加事件
pt[2].onclick = function(){

    // 獲取輸入框的內容
    var v1 = pt[0].value;
    var v2 = pt[1].value;
    // 分割字符串
    var arr = text.split(v1); // arr = [,'']

    // 當第一個框有內容 第二個框內內容
    if(v1 && !v2){
        // 查找
        div.innerHTML = arr.join('<span>' + v1 + '</span>');
    }else if(v1 && v2){
        // 替換
        div.innerHTML = arr.join('<span>' + v2 + '</span>');
    }
}

13, 去掉字符左右的空格

var str = '    字符         ';
console.log(str);
console.log(str.trim());

14, 轉換大小寫

'abc'.toUpperCase() // 大寫
"ABC" 
"ABC".toLowerCase() // 小寫
"abc"

15, 替換字符

語法:字符串.replace('被替換的字符','替換的字符')

var str = '138999999999';

console.log(str.replace('999999999','************'));