Light12306/Web12306/js/utility.js

218 lines
6.4 KiB
JavaScript

define(function (require, exports, module) {
exports.trimToDay = function (d) {
d = d || new Date();
if (!(d instanceof Date)) {
d = new Date(d + '');
}
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
};
/**
* 格式化数字显示
* @param {number} number 要格式化的数字
* @param {number} digits 要保留的数字位数
*/
exports.formatNumber = function (number, digits) {
digits = digits || 2;
var str = '' + Math.round(number * (10 ^ digits)) / (10 ^ digits);
var fc = digits;
var idx = str.indexOf(".");
if (idx != -1) fc = digits - str.length - idx - 1;
else str += ".";
var ab = [];
for (var i = 0; i < fc; i++) {
ab.push("0");
}
return str + ab.join("");
};
//exports.addDays = function (date, days) {
// var x = new Date();
// x.setTime(date.getTime() - date.getTime() % (1000 * 3600 * 24) + 1000 * 3600 * 24 * days);
// return x;
//};
exports.addDays = function (date, offset) {
date = exports.toDate(date);
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + offset);
};
exports.addMonths = function (date, offset) {
date = exports.toDate(date);
return new Date(date.getFullYear(), date.getMonth() + offset, date.getDate());
};
exports.toDate = function (date) {
if (date instanceof Date)
return date;
var time = Date.parse(date);
if (isNaN(time))
return null;
return new Date(time);
};
exports.formatDate = function (date, format) {
/// <summary>格式化指定日期</summary>
/// <param name="format" type="String">格式化字符串</param>
if (!date)
return "";
date = exports.toDate(date);
format = format || "yyyy-MM-dd";
var o = {
"M+": date.getMonth() + 1, //month
"d+": date.getDate(), //day
"h+": date.getHours(), //hour
"m+": date.getMinutes(), //minute
"s+": date.getSeconds(), //second
"q+": Math.floor((date.getMonth() + 3) / 3), //quarter
"S": date.getMilliseconds() //millisecond
};
if (/(y+)/i.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (o.hasOwnProperty(k)) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
}
return format;
};
exports.formatSellDate = function (date) {
date = exports.toDate(date);
var today = exports.addDays(new Date(), 0);
var offset = Math.floor((date - today) / 1000 / 60);
var hour = Math.floor(offset / 60);
var minute = offset % 60;
if (hour < 24) return "今天" + hour + "点" + (minute ? minute + "分" : "");
else if (hour < 72) {
return ["明天", '后天', '大后天'][Math.floor(hour / 24) - 1] + (hour % 24) + "点" + (minute ? minute + "分" : "");
} else {
return exports.formatDate(date, "MM月dd日 hh:mm");
}
};
window.f = exports.formatSellDate;
exports.getDaysDifference = function (date1, date2) {
/// <summary>获得date1到date2之间隔了多少天</summary>
return Math.floor((exports.trimToDay(exports.toDate(date2)).getTime() - exports.trimToDay(exports.toDate(date1)).getTime()) / 1000 / 60 / 60 / 24);
}
exports.format24hTo12h = function (str) {
/// <summary>将24小时制式时间转换为12小时制式</summary>
if (!str)
return '';
var args = str.split('/');
return args.map(function (t) {
if (!/0?(\d{1,2}):(\d{1,2})/.exec(t))
return "";
var h = parseInt(RegExp.$1, 10);
return h < 13 ? "上午" + h + ":" + RegExp.$2 : "下午" + (h - 12) + ":" + RegExp.$2;
});
};
exports.selectTrain = function (trainList, trainFilter, seatOrder, seatFirst, count) {
var seat, train;
if (seatFirst) {
//席别优先
seat = _.find(seatOrder, function (s) {
var treg = _.find(trainFilter, function (t) {
train = _.find(trainList, function (item) {
return t.test(item.code) && (_.findWhere(item.tickets, {code: s}) || {}).count >= count;
});
return typeof (train) != 'undefined';
});
return typeof (treg) != 'undefined';
});
} else {
//车次优先
_.find(trainFilter, function (t) {
seat = _.find(seatOrder, function (s) {
train = _.find(trainList, function (item) {
return t.test(item.code) && (_.findWhere(item.tickets, {code: s}) || {}).count >= count;
});
return typeof (train) != 'undefined';
});
return typeof (seat) != 'undefined';
});
}
if (seat)
return {seat: seat, train: train};
return null;
};
exports.getVcValidate = function (vc) {
return vc + " " + new Date().toLocaleString() + " keyup " + JSON.stringify({keyCode: vc.charCodeAt(vc.length - 1)});
};
exports.parseTimeSpanToMinutes = function (value) {
/// <summary>将“小时:分钟”格式的时间标签转换为分钟</summary>
return /0*(\d+)\s*:\s*0*(\d+)/.exec(value) ? (parseInt(RegExp.$1, 10) * 60 + parseInt(RegExp.$2)) : 0;
};
exports.formatMinutesToShortStr = function (minutes) {
/// <summary>将分钟格式化为时间字符串</summary>
var days = 0;
var hours = Math.floor(minutes / 60);
minutes = minutes % 60;
return (days > 0 ? days + "天" : "") + (hours > 0 ? hours + "小时" : "") + (minutes > 0 ? minutes + "分钟" : "");
};
var encodeHTMLRules = {"&": "&#38;", "<": "&#60;", ">": "&#62;", '"': '&#34;', "'": '&#39;', "/": '&#47;'},
matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g;
exports.htmlEncode = function (str) {
return str.replace(matchHTML, function (m) {
return encodeHTMLRules[m] || m;
});
};
/*
* 分析时间字符串,并转换为相当于当天的秒数
*/
exports.toTimeSpan = function (str, includeHour) {
includeHour = typeof includeHour === 'undefined' ? true : includeHour;
var m = /(\d{1,2}):(\d{1,2})(:(\d{1,2}))?/i.exec(str);
if (!m) return null;
var th = m[4] || includeHour ? parseInt(m[1], 10) : 0;
var tm = parseInt(m[2], 10);
var ts = m[4] && !includeHour ? parseInt(m[4], 10) : 0;
return th * 3600 + tm * 60 + ts;
};
$.fn.toBase64Data = function () {
var arr = [];
this.each(function () {
if (!this.naturalHeight)
return;
var canvas = document.createElement("canvas");
var height = this.naturalHeight;
var width = this.naturalWidth;
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0, width, height);
var url = canvas.toDataURL();
delete canvas;
arr.push({
type: "image",
data: url
});
});
return arr;
};
});