Browse Source

完善功能

master
1549469775 3 years ago
parent
commit
30d9c1bc8c
  1. 32
      README.MD
  2. 146
      dist/pp.cjs.js
  3. 2
      dist/pp.cjs.js.map
  4. 2
      package.json
  5. 31
      src/func.ts
  6. 37
      src/gitee/index.ts
  7. 7
      src/index.ts
  8. 52
      src/util.ts

32
README.MD

@ -2,24 +2,42 @@
### 安装
```bash
npm i @noderun/pp -h
npm i @noderun/pp -g
```
### 帮助
```bash
pp -h
Options:
-v, --version output the version number
-h --help 显示帮助信息
Commands:
login <token> 本地保存Gitee的私人令牌
whoami 查看私人令牌
logout 删除私人令牌
sync [options] 同步模板列表
list [options] 查看所有模板列表
check 查看配置文件
add [options] <url> <name> 添加一个模板仓库
remove <name> 删除一个模板仓库
clone <name> <target> 克隆模板仓库
copy [options] <templateDir> 简单文件夹克隆
help [command] display help for command
```
### 查询
```bash
pp list # 查询已存在的模板列表
pp list -a # 包含仓库地址
```
### 同步
* 在gitee创建私人令牌,权限包括gist的操作
* 复制token,执行`pp sync`同步到gist
> 注意操作gist的是description的pp的,请注意跟你的gist不要重复
> `pp sync`需要手动执行
命令行管理模板项目
* [x] 增删查模板列表
* [x] 克隆项目到本地
* [x] 代码整理
* [x] 同步功能
TODO
* [ ] 代码整理
* [ ] 同步功能

146
dist/pp.cjs.js

@ -44,10 +44,14 @@ catch (e) {
throw e;
}
function readFileTime(path) {
function readFileModifyTime(path) {
var stat = fs__default["default"].statSync(path);
return stat.mtimeMs;
}
function readFileCreateTime(path) {
var stat = fs__default["default"].statSync(path);
return stat.birthtimeMs;
}
function writeErrorFile(content, path) {
if (path === void 0) { path = "pp.error.log"; }
if (typeof content == 'string')
@ -68,6 +72,50 @@ function readIniFile(path, encoding) {
function writeIniFile(path, data) {
fs__default["default"].writeFileSync(path, ini__default["default"].stringify(data));
}
function dateTimeFormat(date, fmt) {
if (fmt === void 0) { fmt = 'yyyy-MM-dd HH:mm:ss'; }
if (!date) {
return '';
}
if (typeof date === 'string') {
date = date.replace('T', ' ').replace('Z', '');
date = new Date(date.replace(/-/g, '/'));
}
if (typeof date === 'number') {
date = new Date(date);
}
var o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'S': date.getMilliseconds()
};
var week = {
'0': '\u65e5',
'1': '\u4e00',
'2': '\u4e8c',
'3': '\u4e09',
'4': '\u56db',
'5': '\u4e94',
'6': '\u516d'
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
if (/(E+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468') : '') + week[date.getDay() + '']);
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
}
}
return fmt;
}
var dataPath = config.listPath;
var Lists = readIniFile(dataPath);
@ -243,6 +291,7 @@ function onLogin(token) {
if (res.message) {
console.log(res.message);
console.log(chalk__default["default"].red("无效私人令牌"));
return [2];
}
Config.getInstance().setGitee({
token: token,
@ -258,23 +307,46 @@ function onLogOut() {
console.log(chalk__default["default"].green("已清除gitee"));
}
function Whoami() {
var giteeConfig = Config.getInstance().getGitee();
var token = giteeConfig.token;
if (token) {
console.log(chalk__default["default"].green("gitee token: ") + chalk__default["default"].greenBright(token));
}
else {
console.log(chalk__default["default"].green("您尚未保存gitee token"));
}
return tslib.__awaiter(this, void 0, void 0, function () {
var giteeConfig, token, res;
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
giteeConfig = Config.getInstance().getGitee();
token = giteeConfig.token;
if (!token) return [3, 3];
console.log(chalk__default["default"].green("gitee token: ") + chalk__default["default"].greenBright(token));
return [4, fetch__default["default"]("https://gitee.com/api/v5/user?access_token=" + token)];
case 1: return [4, (_a.sent()).json()];
case 2:
res = _a.sent();
if (res.message) {
console.log(res.message);
console.log(chalk__default["default"].red("私人令牌已失效"));
return [2];
}
console.log(chalk__default["default"].green("\u6709\u6548\u79C1\u4EBA\u4EE4\u724C\uFF0C\u6B22\u8FCE\u60A8: " + res.name + "(" + res.login + ")"));
return [3, 4];
case 3:
console.log(chalk__default["default"].green("您尚未保存gitee token"));
_a.label = 4;
case 4: return [2];
}
});
});
}
function sync(opts) {
return tslib.__awaiter(this, void 0, void 0, function () {
var giteeConfig, token, params, requestInfo, spinner, gistList, ppConfig, ppId, localTime, data, data, createTime, data;
var giteeConfig, token, params, requestInfo, spinner, gistList, ppConfig, ppId, localTime, localCreateTime, isJustCreate, data, data, createTime, data;
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
giteeConfig = Config.getInstance().getGitee();
token = giteeConfig.token;
if (!token) {
console.log(chalk__default["default"].green("您尚未保存gitee token"));
return [2];
}
params = qs__default["default"].stringify({
access_token: token,
});
@ -300,11 +372,14 @@ function sync(opts) {
ppConfig = file;
}
});
localTime = readFileTime(config.listPath);
localTime = readFileModifyTime(config.listPath);
localCreateTime = readFileCreateTime(config.listPath);
isJustCreate = localTime === localCreateTime;
if (opts.show) {
if (ppConfig) {
console.log("\u521B\u5EFA\u65F6\u95F4: " + ppConfig["create_time"] + "\n");
console.log(ppConfig["data"]);
console.log("\u521B\u5EFA\u65F6\u95F4: " + dateTimeFormat(ppConfig["create_time"], "yyyy-MM-dd HH:mm:ss"));
console.log("\u6570\u636E\u5982\u4E0B: ");
console.log(ppConfig["data"] ? ppConfig["data"] : "暂无数据,请同步");
}
else {
console.log("远端暂无配置文件");
@ -334,11 +409,11 @@ function sync(opts) {
console.log(chalk__default["default"].green("数据强制同步成功"));
return [2];
case 8:
if (opts.pull) {
if (opts.pull || isJustCreate) {
if (ppConfig && ppConfig["create_time"]) {
data = ppConfig["data"];
writeIniFile(config.listPath, data);
console.log(chalk__default["default"].green("强制拉取成功"));
syncWriteFile(config.listPath, data);
console.log(chalk__default["default"].green("拉取成功"));
}
else {
console.log(chalk__default["default"].green("远端未找到配置文件"));
@ -352,7 +427,7 @@ function sync(opts) {
syncFile(ppId, localTime);
}
else if (localTime < createTime) {
writeIniFile(config.listPath, data);
syncWriteFile(config.listPath, data);
console.log(chalk__default["default"].green("本地数据同步成功"));
}
else {
@ -411,7 +486,7 @@ function POST(id, data) {
var token = giteeConfig.token;
var url = "https://gitee.com/api/v5/gists";
var requestInfo = new fetch.Request(id ? url + "/" + id : url, {
method: "POST",
method: id ? "PATCH" : 'POST',
body: qs__default["default"].stringify({
access_token: token,
files: {
@ -438,11 +513,23 @@ function onList(opt) {
}
keys.forEach(function (key) {
var value = data[key];
if (opt === null || opt === void 0 ? void 0 : opt.tag) {
if (!value.tag) {
return;
}
var tagList = opt.tag.split(',');
var tags_1 = value.tag.split(',');
var filterTags = tagList.filter(function (v) { return tags_1.includes(v); });
if (!filterTags.length) {
console.log("暂无此标签的模板");
return;
}
}
if (opt === null || opt === void 0 ? void 0 : opt.all) {
console.log(key + (value.desc ? "(" + value.desc + ")" : "") + (": " + value.url));
console.log(key + (value.desc ? "(" + value.desc + ")" : "") + (value.tag ? "[" + value.tag + "]" : "") + (": " + value.url));
}
else {
console.log(key + (value.desc ? "(" + value.desc + ")" : ""));
console.log(key + (value.desc ? "(" + value.desc + ")" : "") + (value.tag ? "[" + value.tag + "]" : ""));
}
});
}
@ -457,14 +544,14 @@ function onCopy(templateDir, opts) {
}
writefile(templateDir, opts.targetDir);
}
function onClone(name, opts) {
function onClone(name, target) {
var item = Data.getInstance().findOne(name);
if (!item) {
console.log("请先添加项目");
console.log("\u8BF7\u5148\u6DFB\u52A0\u8BE5\u9879\u76EE");
return;
}
var tempPath = path__default["default"].join(os__default["default"].tmpdir(), "pp-" + uuid__default["default"].v4());
var to = opts.dir;
var to = target;
var git_url = "direct:" + item.url;
if (isExist(to)) {
console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹"));
@ -490,18 +577,18 @@ function onRemove(name) {
console.error(chalk__default["default"].red("不存在该模板"));
}
}
function onAdd(url, opt) {
function onAdd(url, name, opt) {
var http = /^(http|https)\:\/\//g;
var git = /(git|root)\@/g;
if (!git.test(url) && !http.test(url)) {
console.error(chalk__default["default"].red("请添加正确的Git仓库地址"));
return;
}
Data.getInstance().addUrl(tslib.__assign(tslib.__assign({}, opt), { url: url }));
Data.getInstance().addUrl(tslib.__assign(tslib.__assign({}, opt), { url: url, name: name }));
console.log(chalk__default["default"].green("添加成功"));
}
function onCheck() {
console.log(JSON.stringify(Data.getInstance().getData()));
console.log(ini__default["default"].stringify(Data.getInstance().getData()));
}
var program = new commander.Command();
@ -512,11 +599,10 @@ program.command("login <token>").description("本地保存Gitee的私人令牌")
program.command("whoami").description("查看私人令牌").action(Whoami);
program.command("logout").description("删除私人令牌").action(onLogOut);
program.command("sync").option('-f --force', "强制同步").option('-d --delete', "删除远端").option('-s --show', "查看远端").option('-p --pull', "强制拉取远端").description("同步模板列表").action(sync);
program.command("list").option('-a --all').description("查看所有模板列表").action(onList);
program.command("list").option('-a --all').option('-t --tag <tag>', "标签筛选").description("查看所有模板列表").action(onList);
program.command("check").description("查看配置文件").action(onCheck);
program
.command("add <url>")
.requiredOption("-n --name <name>", "模板名字")
.command("add <url> <name>")
.option("-d --desc <desc>", "模板具体描述")
.option("-t --tag <tag>", "模板标签")
.description("添加一个模板仓库")
@ -525,7 +611,7 @@ program
.command("remove <name>")
.description("删除一个模板仓库")
.action(onRemove);
program.command("clone <name>").requiredOption("-d --dir <target>", "目标路径").description("克隆模板仓库").action(onClone);
program.command("clone <name> <target>").description("克隆模板仓库").action(onClone);
program.command("copy <templateDir>").requiredOption("-d --targetDir <targetDir>", "目标路径").description("简单文件夹克隆").action(onCopy);
program.parse(process.argv);
//# sourceMappingURL=pp.cjs.js.map

2
dist/pp.cjs.js.map

@ -1 +1 @@
{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

2
package.json

@ -1,6 +1,6 @@
{
"name": "@noderun/pp",
"version": "0.0.1",
"version": "0.0.2",
"description": "命令行管理模板项目",
"main": "dist/pp.umd.js",
"module": "dist/pp.esm.js",

31
src/func.ts

@ -6,6 +6,7 @@ import uuid from "uuid";
import download from "download-git-repo";
import writefile, {isExist} from "@/writefile";
import fs from "fs-extra";
import ini from "ini";
export * from "./gitee"
@ -38,7 +39,7 @@ export * from "./gitee"
*
* @param opt 参数: all:Git地址
*/
export function onList(opt?: { all?: boolean }) {
export function onList(opt?: { all?: boolean, tag:string }) {
const data = Data.getInstance().getData()
const keys = Object.keys(data)
if (!data || !keys.length) {
@ -47,12 +48,24 @@ export function onList(opt?: { all?: boolean }) {
}
keys.forEach((key) => {
const value = data[key]
if(opt?.tag){
if(!value.tag){
return
}
let tagList = opt.tag.split(',')
let tags = value.tag.split(',')
let filterTags = tagList.filter(v=>tags.includes(v))
if (!filterTags.length) {
console.log("暂无此标签的模板");
return
}
}
if (opt?.all) {
console.log(
key + (value.desc ? `(${value.desc})` : "") + `: ${value.url}`
key + (value.desc ? `(${value.desc})` : "") + (value.tag ? `[${value.tag}]` : "") + `: ${value.url}`
);
} else {
console.log(key + (value.desc ? `(${value.desc})` : ""));
console.log(key + (value.desc ? `(${value.desc})` : "") + (value.tag ? `[${value.tag}]` : ""));
}
});
}
@ -73,14 +86,14 @@ export function onCopy(templateDir: string, opts: { targetDir: string }){
writefile(templateDir, opts.targetDir);
}
export function onClone(name: string, opts: { dir: string }) {
export function onClone(name: string, target: string) {
const item = Data.getInstance().findOne(name)
if (!item) {
console.log("请先添加项目");
console.log(`请先添加该项目`);
return;
}
let tempPath = path.join(os.tmpdir(), "pp-" + uuid.v4());
let to = opts.dir;
let to = target;
let git_url = "direct:" + item.url;
if (isExist(to)) {
console.log(
@ -108,17 +121,17 @@ export function onRemove(name: string) {
}
}
export function onAdd(url: string, opt: { name: string; desc?: string }) {
export function onAdd(url: string, name: string, opt: { desc?: string,tag?:string }) {
const http = /^(http|https)\:\/\//g;
const git = /(git|root)\@/g;
if (!git.test(url) && !http.test(url)) {
console.error(chalk.red("请添加正确的Git仓库地址"));
return;
}
Data.getInstance().addUrl({...opt, url: url});
Data.getInstance().addUrl({...opt, url: url, name: name});
console.log(chalk.green("添加成功"));
}
export function onCheck() {
console.log(JSON.stringify(Data.getInstance().getData()));
console.log(ini.stringify(Data.getInstance().getData()));
}

37
src/gitee/index.ts

@ -5,7 +5,7 @@ import fetch, { Request } from "node-fetch";
import qs from "qs";
import ora from "ora";
import config from "@/config";
import { readFileTime, writeIniFile } from "@/util";
import {dateTimeFormat, readFileCreateTime, readFileModifyTime, syncWriteFile, writeIniFile} from "@/util";
export async function onLogin(token: string) {
const res = await (
@ -14,6 +14,7 @@ export async function onLogin(token: string) {
if (res.message) {
console.log(res.message);
console.log(chalk.red("无效私人令牌"));
return
}
Config.getInstance().setGitee({
token,
@ -26,11 +27,20 @@ export function onLogOut() {
console.log(chalk.green("已清除gitee"));
}
export function Whoami() {
export async function Whoami() {
let giteeConfig = Config.getInstance().getGitee();
let token = giteeConfig.token;
if (token) {
console.log(chalk.green("gitee token: ") + chalk.greenBright(token));
const res = await (
await fetch("https://gitee.com/api/v5/user?access_token=" + token)
).json();
if (res.message) {
console.log(res.message);
console.log(chalk.red("私人令牌已失效"));
return
}
console.log(chalk.green(`有效私人令牌,欢迎您: ${res.name}(${res.login})`));
} else {
console.log(chalk.green("您尚未保存gitee token"));
}
@ -44,6 +54,10 @@ export async function sync(opts: {
}) {
let giteeConfig = Config.getInstance().getGitee();
let token = giteeConfig.token;
if(!token){
console.log(chalk.green("您尚未保存gitee token"));
return
}
let params = qs.stringify({
access_token: token,
});
@ -68,11 +82,14 @@ export async function sync(opts: {
ppConfig = file;
}
});
let localTime = readFileTime(config.listPath);
let localTime = readFileModifyTime(config.listPath);
let localCreateTime = readFileCreateTime(config.listPath);
let isJustCreate = localTime === localCreateTime;
if (opts.show) {
if (ppConfig) {
console.log(`创建时间: ` + ppConfig["create_time"] + "\n");
console.log(ppConfig["data"]);
console.log(`创建时间: ` + dateTimeFormat(ppConfig["create_time"],"yyyy-MM-dd HH:mm:ss"));
console.log(`数据如下: `);
console.log(ppConfig["data"]?ppConfig["data"]:"暂无数据,请同步");
} else {
console.log("远端暂无配置文件");
}
@ -101,11 +118,11 @@ export async function sync(opts: {
console.log(chalk.green("数据强制同步成功"));
return;
}
if (opts.pull) {
if (opts.pull || isJustCreate) {
if (ppConfig && ppConfig["create_time"]) {
let data = ppConfig["data"];
writeIniFile(config.listPath, data);
console.log(chalk.green("强制拉取成功"));
syncWriteFile(config.listPath, data);
console.log(chalk.green("拉取成功"));
} else {
console.log(chalk.green("远端未找到配置文件"));
}
@ -118,7 +135,7 @@ export async function sync(opts: {
if (localTime > createTime) {
syncFile(ppId, localTime);
} else if (localTime < createTime) {
writeIniFile(config.listPath, data);
syncWriteFile(config.listPath, data);
console.log(chalk.green("本地数据同步成功"));
} else {
console.log(chalk.green("配置文件数据一致"));
@ -168,7 +185,7 @@ function POST(id: any, data: string) {
let token = giteeConfig.token;
let url = "https://gitee.com/api/v5/gists";
const requestInfo = new Request(id ? url + "/" + id : url, {
method: "POST",
method: id ? "PATCH": 'POST',
body: qs.stringify({
access_token: token,
files: {

7
src/index.ts

@ -16,13 +16,12 @@ program.command("whoami").description("查看私人令牌").action(func.Whoami);
program.command("logout").description("删除私人令牌").action(func.onLogOut);
program.command("sync").option('-f --force', "强制同步").option('-d --delete', "删除远端").option('-s --show', "查看远端").option('-p --pull', "强制拉取远端").description("同步模板列表").action(func.sync);
program.command("list").option('-a --all').description("查看所有模板列表").action(func.onList);
program.command("list").option('-a --all').option('-t --tag <tag>', "标签筛选").description("查看所有模板列表").action(func.onList);
program.command("check").description("查看配置文件").action(func.onCheck);
program
.command("add <url>")
.requiredOption("-n --name <name>", "模板名字")
.command("add <url> <name>")
.option("-d --desc <desc>", "模板具体描述")
.option("-t --tag <tag>", "模板标签")
.description("添加一个模板仓库")
@ -33,7 +32,7 @@ program
.description("删除一个模板仓库")
.action(func.onRemove);
program.command("clone <name>").requiredOption("-d --dir <target>", "目标路径").description("克隆模板仓库").action(func.onClone);
program.command("clone <name> <target>").description("克隆模板仓库").action(func.onClone);
program.command("copy <templateDir>").requiredOption("-d --targetDir <targetDir>", "目标路径").description("简单文件夹克隆").action(func.onCopy);
program.parse(process.argv);

52
src/util.ts

@ -1,11 +1,14 @@
import ini from "ini"
import fs from "fs-extra"
export function readFileTime(path: string){
export function readFileModifyTime(path: string){
var stat = fs.statSync(path);
return stat.mtimeMs
}
export function readFileCreateTime(path: string){
var stat = fs.statSync(path);
return stat.birthtimeMs
}
export function syncReadFile(path:string, encoding: BufferEncoding="utf-8") {
return fs.readFileSync(path, encoding)
}
@ -26,3 +29,48 @@ export function readIniFile(path:string, encoding: BufferEncoding="utf-8") {
export function writeIniFile(path:string, data: Object) {
fs.writeFileSync(path, ini.stringify(data))
}
export function dateTimeFormat(date: Date|number|string, fmt = 'yyyy-MM-dd HH:mm:ss') { //日期时间格式化
if (!date) {
return ''
}
if (typeof date === 'string') {
date = date.replace('T', ' ').replace('Z', '');
date = new Date(date.replace(/-/g, '/'))
}
if (typeof date === 'number') {
date = new Date(date)
}
var o:Record<any, any> = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'S': date.getMilliseconds()
}
let week:Record<any, any> = {
'0': '\u65e5',
'1': '\u4e00',
'2': '\u4e8c',
'3': '\u4e09',
'4': '\u56db',
'5': '\u4e94',
'6': '\u516d'
}
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
}
if (/(E+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468') : '') + week[date.getDay() + ''])
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
}
}
return fmt
}

Loading…
Cancel
Save