zoukankan      html  css  js  c++  java
  • js 获取时间

    项目中常用的取时间的方法

    util/date-util.js

    const oneDay = 86400000;//一天1000*60*60*24毫秒

    //格式化日期

    function formatDate(date,zw=false) {
      let y = date.getFullYear(),
        m = date.getMonth() + 1,
        d = date.getDate();
      m = m < 10 ? "0" + m : m;
      d = d < 10 ? "0" + d : d;
      if(zw){
        return y + "年" + m + "月" + d+"日";
      }else{
        return y + "-" + m + "-" + d;
      }
    };

    //获取当天时间

    export const getToday = function (flag) {
      if(flag==='zw'){
        return formatDate(new Date(),true);
      }else{
        return formatDate(new Date());
      }
    };

    //获取当前星期

    export const getWeek = function (day) {
      let date = day === undefined ? new Date() : new Date(day);
      let sz=date.getDay();
      let zw="日一二三四五六".charAt(sz);
      return{sz,zw}
    };

    //获取当前月的第一天和最后一天

    export const getCurMonth = function (day) {
      let date = day === undefined ? new Date() : new Date(day);
      let currentMonth = date.getMonth();
      let nextMonth = ++currentMonth;
      let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
      let lastDay = formatDate(new Date(nextMonthFirstDay - oneDay));
      date.setDate(1);
      let firstDay = formatDate(date);
      return {lastDay, firstDay}
    };

    //获取本周的第一天和最后一天

    export const getCurWeek = function (day) {
      let date = day === undefined ? new Date() : new Date(day);
      let first = date - (date.getDay() - 1) * oneDay;
      let last = first + oneDay * 6;
      let lastDay = formatDate(new Date(last));
      let firstDay = formatDate(new Date(first))
      return {lastDay, firstDay}
    };

    //获取时间区间内每一天

    export const getEveryDay = function (startTime, endTime=new Date()) {
      let days = [];
      for (let i = Date.parse(startTime); i <= Date.parse(endTime); i += oneDay) {
        let day = formatDate(new Date(i));
        days.push(day);
      }
      return days;
    };

    //获取最近第几天

    export const getTargetDay = function (day,n) {//n表示最近几天,负数为day前几天
      let date;
      if(n===undefined){
        n=day;
        date=new Date()
      }else{
        date = new Date(day);
      }
      let targetDay=formatDate(new Date(date.getTime() + oneDay*n));
      return targetDay;
    };

    //农历 showCal

    var CalendarData = new Array(100);
    var madd = new Array(12);
    var tgString = "甲乙丙丁戊己庚辛壬癸";
    var dzString = "子丑寅卯辰巳午未申酉戌亥";
    var numString = "一二三四五六七八九十";
    var monString = "正二三四五六七八九十冬腊";
    var weekString = "日一二三四五六";
    var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
    var cYear, cMonth, cDay, TheDate;
    CalendarData = new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95);
    madd[0] = 0;
    madd[1] = 31;
    madd[2] = 59;
    madd[3] = 90;
    madd[4] = 120;
    madd[5] = 151;
    madd[6] = 181;
    madd[7] = 212;
    madd[8] = 243;
    madd[9] = 273;
    madd[10] = 304;
    madd[11] = 334;
    
    export const getLunarCalendar = function () {
      var D = new Date();
      var yy = D.getFullYear();
      var mm = D.getMonth() + 1;
      var dd = D.getDate();
      var ww = D.getDay();
      var ss = parseInt(D.getTime() / 1000);
      if (yy < 100) yy = "19" + yy;
      return GetLunarDay(yy, mm, dd);
    };
    function GetBit(m, n) {
      return (m >> n) & 1;
    };
    //农历转换
    function e2c() {
      TheDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]);
      var total, m, n, k;
      var isEnd = false;
      var tmp = TheDate.getYear();
      if (tmp < 1900) {
        tmp += 1900;
      }
      total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38;
    
      if (TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) {
        total++;
      }
      for (m = 0; ; m++) {
        k = (CalendarData[m] < 0xfff) ? 11 : 12;
        for (n = k; n >= 0; n--) {
          if (total <= 29 + GetBit(CalendarData[m], n)) {
            isEnd = true;
            break;
          }
          total = total - 29 - GetBit(CalendarData[m], n);
        }
        if (isEnd) break;
      }
      cYear = 1921 + m;
      cMonth = k - n + 1;
      cDay = total;
      if (k == 12) {
        if (cMonth == Math.floor(CalendarData[m] / 0x10000) + 1) {
          cMonth = 1 - cMonth;
        }
        if (cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
          cMonth--;
        }
      }
    };
    function GetcDateString() {
      var tmp = "";
      //显示农历年:( 如:甲午(马)年 )
      tmp+=tgString.charAt((cYear-4)%10);
      tmp+=dzString.charAt((cYear-4)%12);
      /*tmp+="(";
        tmp+=sx.charAt((cYear-4)%12);*/
      tmp+="年  ";
      if (cMonth < 1) {
        tmp += "(闰)";
        tmp += monString.charAt(-cMonth - 1);
      } else {
        tmp += monString.charAt(cMonth - 1);
      }
      tmp += "月";
      tmp += (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十"));
      if (cDay % 10 != 0 || cDay == 10) {
        tmp += numString.charAt((cDay - 1) % 10);
      }
      return tmp;
    };
    
    function GetLunarDay(solarYear, solarMonth, solarDay) {
    //solarYear = solarYear<1900?(1900+solarYear):solarYear;
      if (solarYear < 1921 || solarYear > 2020) {
        return "";
      } else {
        solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11;
        e2c(solarYear, solarMonth, solarDay);
        return GetcDateString();
      }
    };

    页面调用

    <template>
    <div>
          <p>当天时间:{{today1}}({{today}})</p>
          <p>农历:{{nl}}</p>
          <p>星期{{week.zw}}({{week.sz}})</p>
          <p>本月:{{curMonth.firstDay}} ~ {{curMonth.lastDay}}</p>
          <p>本周:{{curWeek.firstDay}} ~ {{curWeek.lastDay}}</p>
          <p>本周一至今:<span v-for="day in curWeekEveryDay">{{day}},</span></p>
          <p>7天前:{{lastweek}}</p>
    </div>
    </template>
    
    <script>
      import {getToday,getWeek,getCurMonth,getCurWeek,getEveryDay,getTargetDay,getLunarCalendar} from '@/util/date-util'
    
      export default {
          name: "DateTest",
          data() {
              return {
                today:'',
                today1:'',
                nl:'',
                week:'',
                curMonth:'',
                curWeek:'',
                curWeekEveryDay:[],
                lastweek:'',
              }
          },
          created: function () {
            this.init();
          },
          methods: {
            init(){
              this.today=getToday();
              this.today1=getToday('zw');
              this.nl=getLunarCalendar();
              this.week=getWeek();
              this.curMonth=getCurMonth();
              this.curWeek=getCurWeek();
              this.curWeekEveryDay=getEveryDay(getCurWeek().firstDay);
              this.lastweek=getTargetDay('-7');
            }
          }
      }
    </script>
    
  • 相关阅读:
    《浅谈12306核心模型设计思路和架构设计》阅读笔记
    《一路打怪升级,360推荐系统架构演进》阅读笔记
    SOA架构设计的案例分析
    《苏宁易购:商品详情系统架构设计》阅读笔记
    《数据蜂巢架构演进之路》阅读笔记
    洛谷P1005 矩阵取数游戏
    LOJ#6277. 数列分块入门 1
    洛谷P1879 [USACO06NOV]玉米田Corn Fields
    洛谷P1072 Hankson 的趣味题
    洛谷P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  • 原文地址:https://www.cnblogs.com/conglvse/p/9752442.html
Copyright © 2011-2022 走看看