1.格式化时间

  1. /**
  2. * 对Date的扩展,将 Date 转化为指定格式的String
  3. * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符
  4. * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  5. * eg:
  6. * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  7. * (new Date()).Format("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
  8. * (new Date()).Format("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
  9. * (new Date()).Format("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
  10. * (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  11. */
  12. function dateFormat(time=new Date(time),fmt="yyyy-MM-dd HH:mm:ss") {
  13. var o = {
  14. 'M+': time.getMonth() + 1, //月份
  15. 'd+': time.getDate(), //日
  16. 'h+': time.getHours() % 12 == 0 ? 12 : time.getHours() % 12, //小时
  17. 'H+': time.getHours(), //小时
  18. 'm+': time.getMinutes(), //分
  19. 's+': time.getSeconds(), //秒
  20. 'q+': Math.floor((time.getMonth() + 3) / 3), //季度
  21. S: time.getMilliseconds(), //毫秒
  22. };
  23. var week = {
  24. '0': '/u65e5',
  25. '1': '/u4e00',
  26. '2': '/u4e8c',
  27. '3': '/u4e09',
  28. '4': '/u56db',
  29. '5': '/u4e94',
  30. '6': '/u516d',
  31. };
  32. if (/(y+)/.test(fmt)) {
  33. fmt = fmt.replace(RegExp.$1, (time.getFullYear() + '').substr(4 - RegExp.$1.length));
  34. }
  35. if (/(E+)/.test(fmt)) {
  36. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length > 1 ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[time.getDay() + '']);
  37. }
  38. for (var k in o) {
  39. if (new RegExp('(' + k + ')').test(fmt)) {
  40. fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
  41. }
  42. }
  43. return fmt;
  44. }

2. 时间分段

  1. /**
  2. * @description: 时间分段
  3. * @param {Date} startDate 开始时间
  4. * @param {type} endDate 结束时间
  5. * @param {Number} amount 分割段数
  6. * @return {Array} temp 分割后返回的数组
  7. * @author: wangchaoxu
  8. */
  9. function splitTime(startDate, endDate, amount) {
  10. var startTime = new Date(startDate + ' 00:00:00'),
  11. endTime = new Date(endDate + ' 23:59:59'),
  12. gap = (endTime - startTime) / amount;
  13. var temp = [];
  14. for (var i = 0; i < amount; i++) {
  15. startTime.setMilliseconds(startTime.getMilliseconds() + gap);
  16. temp[i] = new Date(startTime.getTime());
  17. }
  18. return temp;
  19. }
  20. var d = splitTime('2017-10-01', '2017-10-10', 5);
  21. //返回结果
  22. /* ["2017-10-02T15:59:59.800Z",
  23. * "2017-10-04T15:59:59.600Z",
  24. * "2017-10-06T15:59:59.400Z",
  25. * "2017-10-08T15:59:59.200Z",
  26. * "2017-10-10T15:59:59.000Z"] */

3.dayOfYear:当前日期天数

  1. const dayOfYear = date =>
  2. Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
  3. dayOfYear(new Date()); // 285

4. forOwn:迭代属性并执行回调

  1. const forOwn = (obj, fn) => Object.keys(obj).forEach(key => fn(obj[key], key, obj));
  2. forOwn({ foo: 'bar', a: 1 }, v => console.log(v)); // 'bar', 1

5. Get Time From Date:返回当前24小时制时间的字符串

  1. const getColonTimeFromDate = date => date.toTimeString().slice(0, 8);
  2. getColonTimeFromDate(new Date()); // "08:38:00"

6. Get Days Between Dates:返回日期间的天数

  1. const getDaysDiffBetweenDates = (dateInitial, dateFinal) =>(dateFinal - dateInitial) / (1000 * 3600 * 24);
  2. getDaysDiffBetweenDates(new Date('2019-01-01'), new Date('2019-10-14')); // 286

7. is:检查值是否为特定类型。

  1. const is = (type, val) => ![, null].includes(val) && val.constructor === type;
  2. is(Array, [1]); // true
  3. is(ArrayBuffer, new ArrayBuffer()); // true
  4. is(Map, new Map()); // true
  5. is(RegExp, /./g); // true
  6. is(Set, new Set()); // true
  7. is(WeakMap, new WeakMap()); // true
  8. is(WeakSet, new WeakSet()); // true
  9. is(String, ''); // true
  10. is(String, new String('')); // true
  11. is(Number, 1); // true
  12. is(Number, new Number(1)); // true
  13. is(Boolean, true); // true
  14. is(Boolean, new Boolean(true)); // true

8. isAfterDate:检查是否在某日期后

  1. const isAfterDate = (dateA, dateB) => dateA > dateB;
  2. isAfterDate(new Date(2010, 10, 21), new Date(2010, 10, 20)); // true

9. isBeforeDate:检查是否在某日期前

  1. const isBeforeDate = (dateA, dateB) => dateA < dateB;
  2. isBeforeDate(new Date(2010, 10, 20), new Date(2010, 10, 21)); // true

10 tomorrow:获取明天的字符串格式时间

  1. const tomorrow = () => {
  2. let t = new Date();
  3. t.setDate(t.getDate() + 1);
  4. return t.toISOString().split('T')[0];
  5. };
  6. tomorrow(); // 2019-10-15 (如果明天是2019-10-15)