new Date()你知道多少

很多小伙伴可能都知道,
Date是js中的一个内置对象,用于处理日期和时间。
当你调用 new Date() 时,它会创建一个新的日期(Date) 对象。
表示当前本地日期和时间。
那么你知道 new Date() 可以接收几种形式的参数吗?
它的默认返回是什么日期格式?
new Date()可以接收4种形式的参数。

常见的日期格式有几种?

我们经常看见 Wed Aug 16 2023 08:00:00 GMT+0800 (中国标准时间)
这样的时间格式,你知道有几种常见的日期格式吗?
上面这一种又是属于那一种呢?
好了,不卖关子,常见的日期格式有如下这几种:
1.中国标准时间 如:Wed Aug 16 2023 08:00:00 GMT+0800 (中国标准时间)
2.时间戳 1692144000000 单位是毫秒 13位数; 10位数的单位是秒
new Date().getTime()返回的就是时间戳 13位数
今天后端说,他想要一个10位数的时间戳,给我整懵了。
在我的印象中时间戳不一是13位数的吗?原来是秒的时间戳
3.UTC格式(国际统一时间) 2023-08-16T16:00:00.000Z

new Date()可以接收4种形式的参数

1.不传递参数:如果没有传递任何参数,创建一个表示当前日期和时间的 Date 对象。
2.传递一个正确的日期字符串。 如:
3.传递一个时间戳 毫秒
4.传递 年、月、日、时、分、秒、毫秒的参数
5.传递一个表示时区偏移量的字符

第1种:不传递参数,创建当前当前日期和时间

<script>
let currentDate = new Date();
console.log(currentDate);
// 表示:当前的日期和时间
// 输出的是:Wed Aug 16 2023 11:00:34 GMT+0800 (中国标准时间)
</script>

第2种: 传递一个正确的日期字符串

我们可以传递一个正确的日期字符串。
这个字符串是可以被我们的js解析为日期的。
如:"2023-08-16", "2023/08/16", <script>
let dateStr = "2023-08-16";
let date = new Date(dateStr);
console.log(date);
// 输出:Wed Aug 16 2023 08:00:00 GMT+0800 (中国标准时间)
</script>

第3种:传递一个时间戳 毫秒

<script>
let timestamp = 1692144000000; // 时间戳 毫秒
let date = new Date(timestamp);
console.log(date); //Wed Aug 16 2023 08:00:00 GMT+0800 (中国标准时间)
</script>

第4种:传递 年、月、日、时、分、秒、毫秒

<script>
let date = new Date(2023, 7, 16, 14, 30, 45, 417); // 2023年8月16日14时30分45秒417毫秒
console.log(date); // 输出:Wed Aug 16 2023 14:30:45 GMT+0800 (中国标准时间)
</script> 我们传递的参数可以是数字或字符串,并且可以有省略。
省略的部分会被设置为对应的最小值或默认值。
如,只提供年份和月份 new Date('2023', 7); 会被解析为 "2023年8月1日 00:00:00"。日期天数解析为1号
如,只提供年份和月份和天 new Date('2023', 7, 16); 会被解析为 "2023年8月16日 00:00:00"。
如,只提供年份和月份和天和小时 new Date('2023', 7, 16, 14); 会被解析为 "2023年8月16日 14:00:00"。

第5种: 传递1个表示时区偏移量的字符

<script>
let date = new Date("Tue Jun 21 2023 14:40:15 UTC+8"); // 一个表示时区偏移量的字符串
console.log(date); // 输出:Wed Jun 21 2023 14:40:15 GMT+0800 (中国标准时间)
</script> ps:这个字符串应该是1个表示时区偏移量的字符串,格式为 "UTC+数字"。
其中数字表示与UTC时间的偏移量(单位为小时)。
例如,"UTC+8" 表示东八区。如果传递了这个参数,那么会创建一个表示特定时区的日期和时间。

我们的发现

我们发现 new Date()的日期格式返回,都是中国标准时间。

如何判断是否是时间对象呢?

我们为什么需要判断是否是时间对象呢?
因为:只有是时间对象才能调用 getTime(),getYear()....等方法 第一种:Object.prototype.toString.call(value) === '[object Date]'
如果返回的是true,说明是时间对象 第二种:时间值.constructor 如:
let date = new Date();
console.log( date.constructor); // ƒ Date() { [native code] }

选择的时间必须大于当前时间

很多时候,我们创建的表单需要进行验证:
1.用户如果选择了时间,时间必须要大于当前时间。
如果不选择时间,则不进行校验。
我们通过时间戳进行比较 我们在下面这个小例子中去看下怎么做?
我们需要做的是:
<template>
<div>
<h2>时间限制</h2> <el-form :model="ruleForm" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="名称" style="width:500px">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item> <el-form-item :rules="{validator:limitTime}" prop="time" label="时间段">
<el-date-picker
v-model="ruleForm.time"
type="datetimerange"
:picker-options="pickerOptions"
align="right"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']">
</el-date-picker>
</el-form-item> <el-button type="primary" @click="onSubmit('ruleForm')">立即创建</el-button>
</el-form>
</div>
</template> <script>
export default {
data(){
return{
// 时间选中只能大于当前日期
pickerOptions: {
disabledDate(time) {
return time.getTime() < Date.now() - 8.64e7;
}
},
ruleForm:{
name:'',
time:''
}
}
},
methods: {
limitTime(rule,value,callback) {
// 如果有时间进行验证,没有时间选择时间不进行验证
if(value &&value.length>1){
// 通过new Date返回13位数的时间戳
let nowTime = new Date().getTime()
// value[0] 是一个时间对象,时间对象可以调用 getTime 返回时间戳
let endTime = value[0].getTime()
if(nowTime>endTime){
callback('开始时间不能小于当前时间')
}else{
callback()
}
}else {
callback()
}
},
onSubmit(ruleForm){
this.$refs[ruleForm].validate((valid) => {
console.log('valid', valid);
if (valid) {
alert('验证通过!');
} else {
alert('验证失败!');
return false;
}
});
}
}
}
</script> <style lang="scss" scoped> </style>
有些小伙伴可能会说:这种限制会不会有问题。
刚开始选择的时间是大于当前时间,
但是用户点击确认的时候最初选择的时间小于了当期时间
其实是不会的,因为点击的时候还会验证一次。
因此,没有问题的。





特别重要:ios和安卓的时间日期格式兼容问题

时间格式在ios和android上有所不同。
在ios端,需要将格式 yyyy-mm-dd 进行转换为 yyyy/mm/dd //格式为yyyy-mm-dd 【尽量不要使用这样的格式,有兼容性问题】
let time = 2021-12-22 //android可以正常使用,ios会出现NaN
new Date(time) //ios需要转换为2021/12/22,同时安卓也支持
new Date(time.replace(/-/g,'/')) 然后就我们通过getTime()获取时间戳进行计算
ps:中国标准时间 如:Wed Aug 16 2023 08:00:00 GMT+0800 (中国标准时间) 在ios和 android 是上OK的

重新学习一下new Date()的更多相关文章

  1. 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    原文网址:http://www.blogjava.net/jerry-zhaoj/archive/2008/10/08/233228.html Date类学习总结 1.计算某一月份的最大天数 Cale ...

  2. Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    Date类学习总结 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance();time.clear();time.set(Calendar.YEAR,yea ...

  3. Linux命令学习总结:date命令

    命令简介: date 根据给定格式显示日期或设置系统日期时间.print or set the system date and time 指令所在路径:/bin/date 命令语法: date [OP ...

  4. JavaScript学习笔记-new Date() 与 Date() 的区别

    var today1 = Date() //返回一个字符串(string),没有getDate等日期对象方法,内容为当前时间 var today2 = new Date() //返回一日期对象,内容为 ...

  5. JavaScript学习总结二(Date对象的用法)

    javascript Date对象的常用API 1:创建日期 Date 对象用于处理日期和时间. 可以通过 new 关键词来定义 Date 对象.以下代码定义了名为 myDate 的 Date 对象: ...

  6. JAVA学习.java.sql.date 与java.util.date以及gettime()方法的分析

    java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分. java.util.Date 就是在除了SQL语句的情况下面使用. 它都有getTime方法返回毫秒数,返回的是自19 ...

  7. JS高级程序设计学习笔记之Date类型

    日期对象的创建:var now =new Date(),不传递参数时,对象自动获取当前时间.(若要创建特定日期与时间的对象,必须传入该日期距离1970/1/1零点的毫秒数). Date.parse() ...

  8. MySql 学习之路-Date函数

    MySQL中重要的内建函数 函数 描述 NOW() 返回当前的日期和时间 NOW() 返回当前的日期和时间. 语法 NOW() -- 实例 -- 下面是 SELECT 语句: SELECT NOW() ...

  9. Linux命令学习总结:date命令【转】

    本文转自:http://www.cnblogs.com/kerrycode/p/3427617.html 命令简介: date 根据给定格式显示日期或设置系统日期时间.print or set the ...

  10. javascript学习笔记 - 引用类型 Date

    三 Date new Date() 在不传递参数的情况下,新创建的对象自动获得当前日期和时间.参数接收毫秒的timestamp Date.parse() 接收表示日期的字符串,返回相应的日期毫秒数ti ...

随机推荐

  1. openGauss内核分析:查询重写

    摘要:查询重写优化既可以基于关系代数的理论进行优化,也可以基于启发式规则进行优化. 本文分享自华为云社区<openGauss内核分析(四):查询重写>,作者:酷哥. 查询重写 SQL语言是 ...

  2. JPEG/Exif/TIFF格式解读(4):win10照片旋转win7不识别

    xif元数据根据不同的内容分布在五个不同的IFD中. IFD0中的数据是由TIFF定义的基本图像数据,其中有些与照片无关,所以Exif只实现其中一小部分.这部份数据在Photoshop中称为TIFF元 ...

  3. PPT 毕业答辩PPT应该怎么样改

    PPT 毕业答辩PPT应该怎么样改

  4. SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑

    如果不指定 xxl.job.executor.ip,默认会用 Docker 的IP,注册到 xxl-job 里面,这时候无法回调 如果xxl.job.executor.ip.xxl.job.execu ...

  5. C++ 的两种换行符区别

    当我们在C++执行一个输出语句时,在输出语句最后可以使用 std::endl 或 \n 建立一个新行. 但这两种换行方式对程序有不同的影响. std::endl 它在建立一个新的行的同时,还会自动刷新 ...

  6. Codeforces Round #544 (Div. 3)简单题解

    复健,时间有限题解比较简陋 A. Middle of the Contest 将小时转成分钟,得到起止时间在一天中的分钟数,取平均值即可,复杂度O(1).平均值转换会时间的时候注意前导0. void ...

  7. Redis 内存优化在 vivo 的探索与实践

    作者:vivo 互联网服务器团队- Tang Wenjian 一. 背景 使用过 Redis 的同学应该都知道,它基于键值对(key-value)的内存数据库,所有数据存放在内存中,内存在 Redis ...

  8. 在Winform系统开发中,对表格列表中的内容进行分组展示

    在我们开发Winform界面的时候,有时候会遇到需要对一些字段进行一些汇总的管理,如果在列表中能够对表格列表中的内容进行分组展示,将比较符合我们的预期,本篇随笔介绍在Winform开发中如何利用Dev ...

  9. 一、docker入门(概念)

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...

  10. 《深入理解计算机系统》实验五 —— Perfom Lab

    本次实验是CSAPP的第5个实验,这次实验主要是让我们熟悉如何优化程序,如何写出更具有效率的代码.通过这次实验,我们可以更好的理解计算机的工作原理,在以后编写代码时,具有能结合软硬件思考的能力. @ ...