前端日期格式的处理

581 阅读3分钟

中国标准时间的转换

中国标准时间格式Wed Jun 07 2023 09:52:05 GMT+0800 (中国标准时间)

转换为年月日 时分秒格式

console.log(new Date()); // Wed Jun 07 2023 09:52:05 GMT+0800 (中国标准时间)
/* --------------------------------------------------时间处理----------------------------------------------------------- */
let originDate = new Date(new Date());
let optionsFormat = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' };
let convertTime = new Intl.DateTimeFormat('zh-CN', optionsFormat).format(originDate);
console.log(convertTime);  // string类型
// 注:后端入库需要将string转换为date类型  to_date('要转换的字符串',转换的格式) to_date('2023/06/08 10:08:21',‘yyyy-mm-dd,hh24:mi:ss')

image.png

转换方法二 年月日

// 中国标准时间 转换成 年月日
function formatDateTime (date) {
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  m = m < 10 ? ('0' + m) : m;
  var d = date.getDate();
  d = d < 10 ? ('0' + d) : d;
  var h = date.getHours();
  var minute = date.getMinutes();
  minute = minute < 10 ? ('0' + minute) : minute;
  // return y + '-' + m + '-' + d+' '+h+':'+minute;
  return y + '-' + m + '-' + d
};

补充

var关键字和let关键字: 1. 从作用域来看,var关键字作用于函数,let关键字作用于代码块{} (作用域要小一些); 2. 变量提升: var可以先声明后使用,没有声明使用会时默认undefined,let要先声明后使用,否则报错。 3. 重复声明: var变量可以重复声明,如果重新声明,则原来的变量会被替换;let变量不可重复声明,重复声明会报错。

年月日时分秒字符串转化为中国标准时间

 /* -------------------------------------------年月日 时分秒转换为中国标准时间-------------------------------------------- */
            const dateAndTimeStr = '2023/06/09 09:52:05';   // 自定义日期字符串
            // 解析日期字符串
            const [dateStr, timeStr] = dateAndTimeStr.split(" ");  // 拆分为两部分 日期和时间
            const [year, month, day] = dateStr.split("/"); // 对年月日进行切割
            const [hour, minute, second] = timeStr.split(":");
            // 创建Date实例对象
            const datetime = new Date(year, month - 1, day, hour, minute, second); // 月份特殊 月份为0-11  所以转换格式要在原来基础上减去1
            // 转换为本地时间并设置时区为“Asia/Shanghai”
            const chinaDateTime = datetime.toLocaleString("zh-CN", { timeZone: "Asia/Shanghai" })
            console.log(chinaDateTime)

日期获取

var date = new Date(); // 方法可返回当天的日期和时间:为中国标准时间
date.getFullYear(); //获取完整的年份(4位)  eg:2023
date.getMonth(); //获取当前月份(0-11,0代表1月,11代表12月)  eg: 5 即为6月
date.getDate(); //获取当前日期对象是几号(1-31)  eg: 8 即为8号
date.getDay(); //获取当前星期X(0-6,0代表星期天) eg: 3 即为星期三
date.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) 时间戳 eg:1686194058401
date.getHours(); //获取当前小时数(0-23)   eg: 11 即为11时
date.getMinutes(); //获取当前分钟数(0-59)  eg: 19 即为19分
date.getSeconds(); //获取当前秒数(0-59)    eg: 20 即为20秒
date.getMilliseconds(); //获取当前毫秒数(0-999) 
date.toLocaleDateString(); //获取当前日期  eg: 2023/6/8  获取年月日的日期格式
var myDate=date.toLocaleTimeString(); //获取当前时间(eg: 上午 10:31:52) myDate2=date.toTimeString(); //获取当前时间(eg: 10:31:52 GMT+0800(中国)) 
date.toLocaleString( ); //获取日期与时间  eg: 2023/6/8 11:24:23  日期明细的string格式
date.toDateString(); // Thu Jun 08 2023 
getTime() //获取当前日期对象的时间戳(方法一) 
date.valueof() //获取当前日期对象的时间戳(方法二) 
Data.now() //获取当前日期对象的时间戳(方法三)

入库日期格式转换(后端)

此处后端数据库为Oracle

image.png

把string转换成date

举例: to_date()

后端sql effectDate日期格式可以为2023-02-13 12:20:23,2023/02/13 12:20:23,所以前端需要提前转换格式。

INSERT into RT01_08136DETAILSTRUC (DETAILEID,TABLENO,
         FIELDNAME,FIELDTYPE,DATASIZE,ISKEY,DEFUALTVALUE,EFFECTDATE,
         CREATORD,CREATETIMED,TABLENAME)
     VALUES(RT01_08136DETAILSTRUC_tb_seq.NEXTVAL,'{tableNo}',
           '{fieldName}','{fieldType}',{dataSize},'{isKey}','{defaultValue}',
     to_date('{effectDate}','yyyy-MM-dd hh24:mi:ss'),'{creatord}',sysdate,'{tableName}')

把timestamp转换为string