# hsw-tools

> 工具函数合集

Latest version **1.0.4** (published 2023-09-12) · ISC license · 0 weekly downloads

## Install

```sh
npm install hsw-tools
pnpm add hsw-tools
yarn add hsw-tools
bun add hsw-tools
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.4 |
| Published | 2023-09-12 |
| First published | 2023-08-25 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 97.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | huangshengwen |
| Maintainers | npm2804964069 |
| Keywords | hsw, tools |

## Links

- npm: https://www.npmjs.com/package/hsw-tools
- npm.io page: https://npm.io/package/hsw-tools

## Dependencies (3)

- [dayjs](https://npm.io/package/dayjs.md) ^1.11.9
- [lodash](https://npm.io/package/lodash.md) ^4.17.21
- [node-polyfill-webpack-plugin](https://npm.io/package/node-polyfill-webpack-plugin.md) ^2.0.1

## Recent versions

- 1.0.4 (latest) — 2023-09-12
- 1.0.1 — 2023-08-25
- 1.0.0 — 2023-08-25

## README

# 工具包

### 介绍
汇总可能会用到的辅助函数之类
类似：lodash 

### 简单使用

```javascript
/* 
导出timejs单独模块
import {timejs} from 'hsw-tools'; 

导出默认，所有方法都会在defaultName中
import defaultName from 'hsw-tools';
*/ 

// 例如：调用timejs模块的backStartToEndDayPlus方法计算起止日期范围内天数和
import {timejs} from 'hsw-tools'; 
timejs.backStartToEndDayPlus('2023-01-01','2052-01-01') // 10585

// 例如：一些判断当前宿主浏览器环境的, 假设判断当前是否处于微信内置浏览器内，可以使用：isWxInBrowser 方法进行判断
import hswTools from 'hsw-tools'
console.log(hswTools.browser.isWxInBrowser()) //true | false

//像一些用到的实用库 也会默认导出的 例如：dayjs | lodash 目前也仅仅导出这两个库  
```
### 导出模块

#### timejs
方法 | 介绍 | 参数 | 返回值
------------ | ------------- | ---------- | -----
dayjs | Day.js是一个极简的JavaScript库，可以为现代浏览器解析、验证、操作和显示日期和时间。[详见](https://dayjs.fenxianglu.cn/) | null | null
[backStartToEndDay](#backStartToEndDay) | 计算给定时间内的天数;<br>==注：该函数无法跨年计算== | [详见示例](#backStartToEndDay) | Number
[backStartToEndDayPlus](#backStartToEndDayPlus) |backStartToEndDay的升级版，功能一样，==增加跨年计算== <br> 仅计算当前年度的话需要将第三个参数传入true,默认为false，跨年可忽略 | [详见示例](#backStartToEndDayPlus)| Number 
[backTimeAreaDay](#backTimeAreaDay) | 获取给定时间范围内的每一天的信息 | [详见示例](#backTimeAreaDay) | Array
[backWeek](#backWeek)|根据年返回周 并且返回每周的起点-终点|[详见示例](#backWeek)|Array
[backNowWeek](#backNowWeek)|返回给定时间所在年的第几周|[详见示例](#backNowWeek)|Array | Number
[backNowQuarter](#backNowQuarter)|返回给定时间所在年的第几周|[详见示例](#backNowQuarter)| String | Number


<p id="backStartToEndDay">backStartToEndDay</p>

```javascript 
import {timejs} from 'hsw-tools';
const {backStartToEndDay} = timejs
/**
 *
 * @param sTime 开始时间
 * @param endTime 结束时间 
 * @param toDay 是否将当天也计算在内
 * @returns number 给定时间之间的天数 (默认返回当前年开始到当前的时间之间的天数)
 */
 //当时间 2023-08-28
 backStartToEndDay() // 239 
 backStartToEndDay('2023-01-01','2023-12-31',true) // 365
 backStartToEndDay('2023-01-01','2023-12-31',false) // 364

```
<p id="backStartToEndDayPlus">backStartToEndDayPlus</p>

```javascript 
import {timejs} from 'hsw-tools';
/**
 * backStartToEndDay升级版本 增加夸年，其他特性和用法一致
 * @param sTime 开始时间
 * @param endTime 结束时间 
 * @param toDay 是否将当天也计算在内
 * @returns number 给定时间之间的天数 (默认返回当前年开始到当前的时间之间的天数)
 * 注意：如果是计算一整年的，且是本年度的切记需要设置today = true ,不然31号是不会计算进去的，跨年计算可忽略
 */
 const {backStartToEndDayPlus} = timejs
 backStartToEndDayPlus('2023-01-01','2052-12-31') // 364 
 backStartToEndDayPlus('2023-01-01','2052-01-01') // 10585
```
<p id="backTimeAreaDay">backTimeAreaDay</p>

```javascript
 import {timejs} from 'hsw-tools';
 const {backTimeAreaDay} = timejs
/**
 *  返回给定时间段内的时间信息包括起始和结束时间 （时间戳对比的时候需要注意当前数据时间戳是该日期8点算起的，数据日补零需要）
 * @param s 起始时间
 * @param e 结束时间
 * @returns array
 */

  /*
    [
        {
            formatTime: "2023-01-01"
            time: 1672531200000
        },
        {
            formatTime: "2023-01-02"
            time: 1672617600000 
        }
    ]
  */
 backTimeAreaDay('2023-01-01','2023-01-02')

```
<p id="backWeek">backWeek</p>

```javascript
 import {timejs} from 'hsw-tools';
 const {backWeek} = timejs
 /**
 * 根据年返回周 并且返回每周的起点-终点
 * @param year 
 * @param format 日期格式化 仅限年月日 例如：YYYY-M-D | YYYY-MM-MM | MM/YYYY/DD | YYYY年MM月DD日
 */
 backWeek('2023')
 /*
    id:2, 
    label:'第2周', //处于年中第几周
    oneDayList:[
        {formatTime: '2022-01-03', time: 164116800000 }
        ....
        {formatTime: '2022-01-09', time: 1641686400000}
    ],
    value:['2022-01-03', '2022-01-09'] //周起止点
 */
```
<p id="backNowWeek">backNowWeek</p>

```javascript
 import {timejs} from 'hsw-tools';
 const {backNowWeek} = timejs
 /**
 * 返回给定时间所在年的第几周
 * @param date 时间
 * @param backType 返回数据类型 1返回周的下标 2返回当前日期的一周数据
 */
 backNowWeek('2023-08-28','1') // 36

 backNowWeek('2023-08-28','2')
 /*
    [
        {formatTime: '2023-08-28', time: 1693180800000}
        ....
        {formatTime: '2023-09-03', time: 1693699200000}
    ]
  */
```
<p id="backNowQuarter">backNowQuarter</p>

```javascript
 import {timejs} from 'hsw-tools';
 const {backNowWeek} = timejs
 /**
 * 返回给定时间所在季度
 * @param date 时间
 * @param toChineseNumerals 是否转为中文大写数字
 * @returns String | Number
 */

 backNowQuarter('2023-08-28') // 3
 backNowQuarter('2023-08-28',true) //三
```

#### arrayjs
方法 | 介绍 | 参数 | 返回值
------------ | ------------- | ---------- | -----
[treeFlat](#treeFlat) | 树结构数组打平为一维数组 |[详见示例](#treeFlat) | Array
[filterSame](#filterSame) |数组对象去重 |[详见示例](#treeFlat) | Array

<p id="treeFlat">treeFlat</p>

```javascript
 import {arrayjs} from 'hsw-tools'
 const {treeFlat} = arrayjs
/**
 * @param arr 需要打平的树结构数组
 * @param field 需要拆解的字段
 * @param parentName 能都代表父元素的字段（会被注入到新的打平的子元素中去）
 * @returns []
 */
const origin = [
    {
        children:[
            {
                name:'张小三',
                age:40,
                children:[
                    {
                      name:'张小小三',
                      age:18,
                    }
                ]
            }
        ],
        name:'张三',
        age:70
    }
]
 treeFlat(orignData,'children') // [{name:'张三',age:70},{name:'张小三',age:40}....]

```

<p id="filterSame">filterSame</p>

```javascript
import {arrayjs} from 'hsw-tools'
 const {filterSame} = arrayjs
/**
 * 数组对象去重 （并不是全等去重，而是对比某字段）
 * @param filterField  作为筛选条件的key
 * @param arr 被筛选的数组
 * @returns array
 */
 const origin = [
    {
        age:40,
        name:'张三'
    },
    {
        age:70,
        name:'李四'
    },
    {
         age:40,
        name:'张三'
    }
 ]
 filterSame('age',origin) //[{age:70,name:'李四'},{age:40,name:'张三'}]
```
#### lodash
[详见官方文档](https://www.lodashjs.com/)

#### mapBaidu （基于已申请key并正确引入项目-[百度地图文档](https://lbsyun.baidu.com/index.php?title=jspopularGL)）
方法 | 介绍 | 参数 | 返回值
------------ | ------------- | ---------- | -----
[getLocation](#getLocation) |定位服务，基于百度地图 |null |Object

<p id="getLocation">getLocation</p>

```javascript
 import {mapBaidu} from 'hsw-tools'
 const {getLocation} = mapBaidu
 //需要授权 分为浏览器定位和IP定位 默认浏览器定位-失败（成功直接返回结果）-启用ip定位-成功/失败-返回结果
 getLocation()

/*
    lng: 117.5, //经度
    lat: 27.5, // 维度
    origin: {}, //源数据 地址信息可从源数据中获取
    locationOrigin: 'IP' //定位数据来源 IP / LOCATION
 */
```

#### mapGaode （基于已申请key并正确引入项目-[高德地图文档](https://lbs.amap.com/api/jsapi-v2/summary/)）
方法 | 介绍 | 参数 | 返回值
------------ | ------------- | ---------- | -----
[areaCenter](#areaCenter) |计算多个经纬度点的中心点，基于高德地图 |[详见示例](#areaCenter)  |AMapBounds

<p id="areaCenter">areaCenter</p>

```javascript
 import {mapGaode} from 'hsw-tools'
 const {areaCenter} = mapGaode
/**
 * 
 * @param {*} lns 经度合集
 * @param {*} las 纬度合集
 * @param {*} map 地图实例 传入此参数之后调用areaCenter方法完成时会自动将中心点调整到所传经纬度构成的矩形中心点
 * @return bounds 详情见高德地图  AMap.Bounds 类
 */
 const bounds = areaCenter([112.5654,118.2366.....],[21.564556,32.566....],map)


```

#### browser
方法 | 介绍 | 参数 | 返回值
------------ | ------------- | ---------- | -----
[porm](#porm) |判断设备当前客户端 PC/Mobile |null | Mobile / PC
[aori](#aori) |判断用户当前设备是Android还是IOS |null | Android / IOS
[browserKernel](#browserKernel) |判断浏览器内核名称 |null | MozillaFirefox / Opera / MicrosoftInternetExplorer / MicrosoftEdge / GoogleChromeorChromium / AppleSafari / unknown
[isPad](#isPad) |判断是否是pad |null | Boolen
[isWxInBrowser](#isWxInBrowser) | 判断当前是否是微信内置浏览器 |null | Boolen
[isSafari](#isSafari) |判断是否为苹果的Safari浏览器 |null | Boolen
[isIE](#isIE) |是否是IE |null | Boolen
[isIE8under](#isIE8under) | 是否是ie8以下版本 |null | Boolen

### testjs

方法 | 介绍 | 参数 | 返回值
------------ | ------------- | ---------- | -----
[isemail](#isemail) | 验证电子邮箱格式 | null | Boolen
[ismobile](#ismobile) |验证手机格式 | value | Boolen
[isurl](#isurl) |验证URL格式 | value | Boolen
[isdate](#isdate) | 验证日期格式 | value | Boolen
[isdateISO](#isdateISO) | 验证ISO类型的日期格式 |value | Boolen
[isnumber](#isnumber) | 验证十进制数字 | value | Boolen
[isstring](#isstring) | 验证字符串 | value | Boolen
[isdigits](#isdigits) | 验证整数 | value | Boolen
[isidCard](#isidCard) | 验证身份证号码 | value | Boolen
[iscarNo](#iscarNo) | 是否车牌号 | value | Boolen
[isamount](#isamount) | 金额,只允许2位小数 | value | Boolen
[ischinese](#ischinese) | 是否中文字符 | value | Boolen
[isletter](#isamount) | 是否纯字母 | value | Boolen
[isenOrNum](#isenOrNum) | 只能是字母或者数字 | value | Boolen
[iscontains](#iscontains) | 验证是否包含某个值 | value,param  | Boolen
[isrange](#isrange) | 验证一个值范围[min, max] | value,param | Boolen
[israngeLength](#israngeLength) | 验证一个长度范围[min, max] | value,param | Boolen
[islandline](#islandline) | 是否固定电话 | value | Boolen
[isempty](#isempty) | 判断是否为空 | value  | Boolen
[isjsonString](#isjsonString) | 是否json字符串 | value | Boolen
[isarray](#isarray) | 是否数组 | value | Boolen
[isobject](#isobject) | 是否对象 | value | Boolen
[ismsgcode](#ismsgcode) | 是否短信验证码 | value,len = 6  | Boolen
[isfunc](#isfunc) | 是否函数方法 | value | Boolen
[ispromise](#ispromise) | 是否promise对象 | value | Boolen
[isimage](#isimage) | 是否图片格式 | value | Boolen
[isvideo](#isvideo) | 是否视频格式 | value | Boolen
[isregExp](#isregExp) | 是否为正则对象 | value | Boolen

---
_Source: https://npm.io/package/hsw-tools · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
