一、前端 moment.js 的常用方法
一、引入moment.js
1.Nodejs方式引入
(1)安装
npm install moment _–save _
yarn add moment # Yarn
(2)引入
// require 方式
var moment = require(‘moment’);
// import 方式
import moment from ‘moment’;
2.浏览器方式引入
二、使用
1. 使用moment.js格式化日期
moment().format('MMMM Do YYYY, h:mm:ss a'); // 七月 20日 2022, 4:25:13 下午
moment().format('dddd'); // 星期三
moment().format("MMM Do YY"); // 7月 20日 22
moment().format('YYYY [escaped] YYYY'); // 2022 escaped 2022
moment().format('YYYY-MM-DD HH:mm:ss') //"2022-07-20 16:46:40"
moment().format('YYYY年MM月DD日 HH时mm分ss秒') //"2022年07月20日 16时47分17秒"
moment().format('YYYY年MM月DD日 HH:mm:ss') // "2022年07月20日 16:46:18"
moment().format('YYYY.MM.DD HH:mm:ss') //"2022.07.20 16:47:58"
2. 相对时间
moment("20111031", "YYYYMMDD").fromNow(); // 11 年前
moment("20120620", "YYYYMMDD").fromNow(); // 10 年前
moment().startOf('day').fromNow(); // 16 小时前
moment().endOf('day').fromNow(); // 8 小时内
moment().startOf('hour').fromNow(); // 25 分钟前
3.获取/设置时间信息
moment().second() //获得 秒
moment().second(Number) //设置 秒。0 到 59
moment().minute() //获得 分
moment().minute(Number) //设置 分。0 到 59
// 类似的用法
moment().hour() // 小时
moment().date() // 一个月里的第几天
moment().day() // 星期几
moment().dayOfYear() // 一年里的第几天
moment().week() // 一年里的第几周
moment().month() // 第几个月
moment().quarter() // 一年里的第几个季度
moment().year() // 年
moment().daysInMonth() // 当前月有多少天
4.操作
moment().add(7, 'days') // 之后的第7天。第2个参数还可以是 'months', 'years' 等。注意是复数。
moment().add(7, 'd')// 与上面一行代码的运行结果一样。
moment().subtract(1, 'months') // 上个月
moment().startOf('week') // 这周的第一天
moment().startOf('hour') // 等效与 moment().minutes(0).seconds(0).milliseconds(0)。
// 还支持 'year','month' 等
moment().endOf('week')
5.查询
// 早于
moment('2010-10-20').isBefore('2010-10-21') // true
moment('2010-10-20').isBefore('2010-12-31', 'year') // false
moment('2010-10-20').isBefore('2011-01-01', 'year') // true
// 是否相等
moment('2010-10-20').isSame('2010-10-20') // true
moment('2010-10-20').isSame('2009-12-31', 'year') // false
moment('2010-10-20').isSame('2010-01-01', 'year') // true
// 晚于
moment('2010-10-20').isAfter('2010-10-19') // true
moment('2010-10-20').isAfter('2010-01-01', 'year') // false
moment('2010-10-20').isAfter('2009-12-31', 'year') // true
// 是否在时间范围内
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25') // true
moment('2010-10-20').isBetween('2010-01-01', '2012-01-01', 'year') // false
moment('2010-10-20').isBetween('2009-12-31', '2012-01-01', 'year') // true
moment().isLeapYear() // 是否是闰年
二、mysql 时间函数
1. 获取当前时间
-- 返回当前日期 2022-07-20
select curdate() ;
-- 返回当前时间 16:46:41
select curtime() ;
-- 返回当前日期和时间 2022-07-20 16:47:02
select now() ;
-- 返回当前日期和时间 20220720164739
select now() + 0 ;
-- 返回日期 date 年份 2022
select year(now())
-- 返回日期 date 月份 7
select month(now()) ;
-- 返回日期 date 月份的名字 July
select monthname(now()) ;
-- 返回日期 date 为一年中的第几周 29
select week(now()) ;
-- 返回 time 的小时值 16
select hour(now()) ;
-- 返回 time 的小时值
select minute(now()) ;
2.时间变化
-- 在当前时间上增加 3 天 2022-07-23 16:55:21
select date_add(now(), interval 3 day) ;
-- 在当前时间上增加 3 天 加上时间格式化 2022-07-23
SELECT DATE_FORMAT( DATE_ADD(NOW(),INTERVAL 3 DAY) ,'%Y-%m-%d')
-- 9分钟前 加上格式化 2022-07-20 16:52:00
SELECT DATE_FORMAT( DATE_ADD(NOW(),INTERVAL-9 MINUTE) ,'%Y-%m-%d %H:%i:00')
-- 在当前时间上减少 3 天
select date_add(now(), interval -3 day) ;
-- 在当前时间上增加 1 小时
select date_add(now(), interval 1 hour);
-- 在当前时间上增加 1 分钟
select date_add(now(), interval 1 minute);
-- 在当前时间上增加 1 秒
select date_add(now(), interval 1 second);
-- 在当前时间上增加 1 微秒
select date_add(now(), interval 1 microsecond);
-- 在当前时间上增加 1 星期
select date_add(now(), interval 1 week);
-- 在当前时间上增加 1 个月
select date_add(now(), interval 1 month);
-- 在当前时间上增加 1 个季度,相当于3个月
select date_add(now(), interval 1 quarter);
-- 在当前时间上增加 1 年
select date_add(now(), interval 1 year);
//计算两个时间的天数差
select datediff(now()," 2022-07-10")
//结果是:-10
3.时间格式化
select date_format(now(),"%Y/%m/%d")
// 2018/05/10
select date_format(now(),'%Y-%m-%d %H')
// 2022-07-20 17
4。
SELECT
CASE
WHEN WEEKDAY(NOW()-INTERVAL DAY(NOW()) DAY) = 6 THEN (DAY(NOW())+WEEKDAY(NOW()-INTERVAL DAY(NOW()) DAY)) DIV 7
ELSE (DAY(NOW())+WEEKDAY(NOW()-INTERVAL DAY(NOW()) DAY)) DIV 7 + 1
END week_of_month
Java时间处理
public class TimeUtil {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
/**
* 获取当前日期指定天数之后的日期.
* @param num 相隔天数
* @return Date 日期
* @since 1.0
*/
public static Date nextDay(int num) {
Calendar curr = Calendar.getInstance();
curr.set(Calendar.DAY_OF_MONTH, curr.get(Calendar.DAY_OF_MONTH) + num);
return curr.getTime();
}
/**
* 获取当前时间的10位时间戳
* @return
*/
public static String getTimestamp(){
return String.valueOf(System.currentTimeMillis() / 1000);
}
/**
* 获取当前时间 按指定格式来 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getTime(){
Date now = new Date();
String time = sdf.format(now);
return time;
}
/**
* date转String 按指定格式来 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getAttrTime(Date date){
String time = sdf.format(date);
return time;
}
/**
* 时间戳转String 按指定格式来 yyyy-MM-dd HH:mm:ss 13位时间戳
* @return
*/
public static String getLongTime(long stamp){
String time = sdf.format(new Date(stamp));
return time;
}
/**
* 时间戳转String 按指定格式来 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getAttrLongTime(long stamp){
long longTime = stamp * 1000;
String time = sdf.format(new Date(longTime));
return time;
}
/**
* 校验时间是否是小于现在时间 处于合理范围内
* @param createTime 时间
* @param dayNum 天数
* @return
*/
public static boolean checkDateTime(Date createTime,long dayNum){
Date date1 = new Date();
if(null==createTime){
createTime = date1;
}
long day=(date1.getTime()-createTime.getTime())/(24*60*60*1000);
if(day <= dayNum){
return true;
}
return false;
}
/**
* 校验时间 并获取分钟差异的时间
* @param dateTime 时间
* @param minuteTime 差异分钟数 -5 5分钟之前的时间
* @return
*/
public static String checkVipOrderTimeStamp(String dateTime,Integer minuteTime){
if(NullUtils.isNullString(dateTime)){
return getMinuteTimeStamp(minuteTime);
}else{
try {
sdf.parse(dateTime);//检测
} catch (ParseException e) {
e.printStackTrace();
return getMinuteTimeStamp(minuteTime);
}
}
return dateTime;
}
/**
* 获取分钟差异的时间
* @param minuteTime 差异分钟数 -5 5分钟之前的时间
* @return
*/
public static String getMinuteTimeStamp(Integer minuteTime){
//获取当前时间的前5分钟时间
Calendar beforeTime = Calendar.getInstance();
beforeTime.add(Calendar.MINUTE, minuteTime);
Date date = beforeTime.getTime();
String time = sdf.format(date);
// System.out.println(time);
return time;
}
/**
* 查询唯代购品牌是否满足时间条件 必须大于多少天才能入库
* @param dateEnd 标准格式 yyyy-MM-dd HH:mm:ss 品牌结束时间
* @param day 时间 必须大于多少时间
* @return
* @throws ParseException
*/
public static boolean getVdgBrandSellTime(String dateEnd,long day) {
if(NullUtils.isNullString(dateEnd)){
return false;
}
try{
Date d1 = sdf.parse(dateEnd);//转Date
// Date d2 = sdf.parse(dateStart);//转Date
Date d2 = new Date();//转Date
long diff = d1.getTime() - d2.getTime();//这样得到的差值是毫秒级别
long days = diff / (1000 * 60 * 60 * 24);
// long hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);
long minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60);
// System.out.println(""+days+"天"+hours+"小时"+minutes+"分");
if(days >= day){
return true;
}
}catch (Exception e){
e.printStackTrace();
}
return false;
}
/**
* 校验时间天数
* @param d1 标准格式 yyyy-MM-dd HH:mm:ss 时间
* @param day 时间 必须大于多少时间
* @return
*/
public static boolean ckeckDayTime(Date d1,long day) {
try{
Date d2 = new Date();//转Date
long diff = d2.getTime() - d1.getTime();//这样得到的差值是毫秒级别
long days = diff / (1000 * 60 * 60 * 24);
// long hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);
// long minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60);
// System.out.println(""+days+"天"+hours+"小时"+minutes+"分");
if(days >= day){
return true;
}
}catch (Exception e){
e.printStackTrace();
}
return false;
}
/**
* long时间戳装换为Date
* @param stamp
* @return
*/
public static Date getDateByLongTime(long stamp){
long longTime = stamp * 1000;
return new Date(longTime);
}
/**
* 获取当前时间之前或之后几小时 hour
* @param hour
* @return
*/
public static String getTimeByHour(int hour) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + hour);
return sdf.format(calendar.getTime());
}
/**
* 求出两个时间的时间差
* @param stardateStr
* @param enddateStr
* @return
*/
public static boolean getDateStr(String stardateStr,String enddateStr){
SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//输入的被转化的时间格式
Date date1 = new Date();
Date date2 = date1;
if(null!=stardateStr){
try {
date1 = dff.parse(stardateStr);
} catch (ParseException e) {
// date1 = new Date();
}
}
if(null!=enddateStr){
try {
date2 = dff.parse(enddateStr);
} catch (ParseException e) {
// date2 = new Date();
}
}else{
// Calendar c = Calendar.getInstance();
// c.setTime(date1);
// c.add(Calendar.DAY_OF_MONTH, 1);
// date2 = c.getTime();
}
long day=(date2.getTime()-date1.getTime())/(24*60*60*1000);
// System.out.println(day);
if(day<=2 && day>0){
return true;
}
return false;
}
/**
* 2019-08-29T08:41:25.367Z 装换为 Date格式 yyyy-MM-dd HH:mm:ss
* @param dateStr
* @return
* @throws ParseException
*/
public static String getDateStr(String dateStr){
SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//输入的被转化的时间格式
Date date1 = null;
try {
date1 = dff.parse(dateStr);
} catch (ParseException e) {
date1 = new Date();
}
String str1 = dff.format(date1);
return str1;
}
/**
* 获取当前时间 Date格式 yyyy-MM-dd 自定义
* @param dayNum 时间 1明天 -1昨天
* @return
* @throws ParseException
*/
public static String getCustomDateStr(Integer dayNum){
SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//输入的被转化的时间格式
Date today = new Date();
Date date1 = null;
try {
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add(Calendar.DAY_OF_MONTH, dayNum);
date1 = c.getTime();
} catch (Exception e) {
date1 = today;
}
String str1 = dff.format(date1);
return str1;
}
public static String getDateStrDxie(String dateStr) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date = formatter.parse(dateStr);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sDate=sdf.format(date);
return sDate;
}
/**
* 获取Date时间
* @param dateStr
* @return
*/
public static Date getDate(String dateStr) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = sdf.parse(dateStr);
return parse;
} catch (ParseException e) {
}
return new Date();
}
/**
* 检查 中文时间格式是否正确
* @param dateStr
* @return
* @throws ParseException
*/
public static String ckeckStringDate(String dateStr) throws ParseException {
Date parse = sdf.parse(dateStr);//转Date
String sDate=sdf.format(parse);//转String 标准格式 yyyy-MM-dd HH:mm:ss
return sDate;
}
}
private static final char SEPARATOR = '_';
/**
* 驼峰命名法工具
* @return
* toCamelCase("hello_world") == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toCamelCase(String s) {
if (s == null) {
return null;
}
s = s.toLowerCase();
StringBuilder sb = new StringBuilder(s.length());
boolean upperCase = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == SEPARATOR) {
upperCase = true;
} else if (upperCase) {
sb.append(Character.toUpperCase(c));
upperCase = false;
} else {
sb.append(c);
}
}
return sb.toString();
}
/**
* 驼峰命名法工具
* @return
* toCamelCase("hello_world") == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toCapitalizeCamelCase(String s) {
if (s == null) {
return null;
}
s = toCamelCase(s);
return s.substring(0, 1).toUpperCase() + s.substring(1);
}
/**
* 下划线转驼峰命名
*/
public static String toUnderScoreCase(String s)
{
if (s == null)
{
return null;
}
StringBuilder sb = new StringBuilder();
boolean upperCase = false;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
boolean nextUpperCase = true;
if (i < (s.length() - 1))
{
nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
}
if ((i > 0) && Character.isUpperCase(c))
{
if (!upperCase || !nextUpperCase)
{
sb.append(SEPARATOR);
}
upperCase = true;
}
else
{
upperCase = false;
}
sb.append(Character.toLowerCase(c));
}
return sb.toString();
}
//图片处理
/**
* 依据url 获取 base64的商品图片数组
* @param urls
* @return
*/
public static LinkedList<String> getImagesToBase64ByOnlineNew(List<String> urls){
if(NullUtils.isNotNullList(urls)){
LinkedList<String> base64Pics = new LinkedList<>();//base64商品图集合
for (String url : urls) {
try{
String s = Base64ImgUtil.ImageToBase64ByOnlineNew(url);
base64Pics.add(s);
}catch (Exception e){
e.printStackTrace();
}
}
return base64Pics;
}
return null;
}