Javascript Date 格式化日期

本文介绍了JavaScript中Date对象的toLocaleString(), toLocaleDateString()和toLocaleTimeString()方法,用于根据区域设置显示日期和时间。通过locale参数可以指定不同国家/地区的日期格式,而options参数则允许自定义日期的显示格式,如年月日的表示方式、小时制等。此外,还展示了如何获取农历日期和处理时区转换。掌握这些技巧,能更灵活地处理日期格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们在使用Javascript 进行日期的操作的时候经常会碰到将日期按特定格式显示和输出的需求。例如YYYY-MM-DD HH:mm:ss 形式的,市面上也有很多现成的库或者代码片段可以用。那么如果我们想自己更灵活的方式组织或者显示该怎么办呢?这里着重介绍一下与locale(即区域)相关的几个方法来解决这个问题。

铺垫

        首先,我们要知道Date 对象其实提供了3个与locale 相关的方法,他们分别是toLocaleString(), toLocaleDateString() 和 toLocaleTimeString(); 其实多数的时候我们是直接调用这几个方法获取并使用其的输出结果,其实他们都能接受2个可选参数locale 和 options,这使得其功能变得更强大。

接下来,调用这几个方法看看会输出什么?Example1.js

/**未提供 locale 和 options 参数**/
let today = new Date();
console.log(navigator.language);//看看当前浏览器的默认语言是啥,我这里是简体中文,即zh-CN
console.log(today.toLocaleString());//输出结果是: "2021/9/8 下午8:16:28"
console.log(today.toLocaleDateString());//输出结果是:"2021/9/8"
console.log(today.toLocaleTimeString());//输出结果是:"下午8:16:28"
 

        可以看的出,输出的结果是根据浏览器的默认语言对应的国家/地区的时间记录格式来输出的。而且可以的出一个结论,那就是toLocaleString()的输出是完全包含了另外两个方法的内容,确切的说是另外两个字符串的拼接。

        如果将浏览器的默认语言改成美式英文,那么运行上面的代码将得到完全不同的结果。那么我们怎么才能不手工改变浏览器的默认语言还能得到想要的另外一个国家的日期输出格式呢?这里就要用到我们前面提到的参数locale了,locale是用来指定区域的(例如:中国大陆地区-'zh-CN',中国香港地区-'zh_HK',中国台湾地区-'zh_TW',英国-'en-GB',德国-'de-DE',日本-'ja',韩国-'ko'等等...)。关于locale 的完整列表请见链接

        下面通过设置locale来获得当前日期的韩国语输出格式试试。Example2.js

/**仅提供 locale 参数**/
let today = new Date();
console.log(today.toLocaleString('ko'));//输出结果是: "2021. 9. 8. 오후 8:16:28"
console.log(today.toLocaleDateString('ko'));//输出结果是:"2021. 9. 8."
console.log(today.toLocaleTimeString('ko'));//输出结果是:"오후 8:16:28"
 

        那么前面提到的options参数是做什么用的呢?其实就是设置输出的日期字符串中每个字段(年月日时分秒)的格式。而且只有给定的项才被输出,未给定的项将不包括在返回的字符串中。见下面的例子Example3.js, 请根据输出的结果和Example1.js 中的输出比较一下。

/**提供了 locale 和 options 参数**/
let today = new Date();
let option1 = {year:'2-digit', month:'2-digit',day:'2-digit'};
let option2 = {year:'numeric', month:'numeric', day:'numeric', 'weekday':'long'};
let option3 = {hour:'2-digit'};
console.log(today.toLocaleString('zh-CN', option1));//输出结果是: "21/09/08"
console.log(today.toLocaleDateString('zh-CN', option2));//输出结果是:"2021年9月8日星期三"
console.log(today.toLocaleTimeString('zh-CN', option3));//输出结果是:"下午08时"

        到这里,就可以得出一个结论。使用Date 提供的这几个方法,可以得到某个区域(语言区)的日期输出格式,并且可以指定其中数据项以什么形式出现。那么控制这些数据输出项的参数都有哪些呢?请见以下列表中给出的数据项及其可用的选项值。

Property说明Values
weekday星期"narrow", "short", "long"
era纪元;例如:公元"narrow", "short", "long"
year"2-digit", "numeric"
month"2-digit", "numeric", "narrow", "short", "long"
day"2-digit", "numeric"
hour"2-digit", "numeric"
minute"2-digit", "numeric"
second"2-digit", "numeric"
timeZoneName时区名称"short", "long"
timeZone时区,将会把时间的输出 转换到这个时区的时间给定的时区字符串, 例如:"America/Los_Angeles",完整列表见
hour12true: 12小时制式, 默认 false: 24小时制式true,false
calendar使用什么样的日历。 如果是chinese,则是中国农历 默认为“gregory”buddhist", "chinese", "coptic", "ethiopia", "ethiopic", "gregory", "hebrew", "indian", "islamic", "iso8601", "japanese", "persian", "roc"
numberingSystem数字的显示方式, 默认 "latn"arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".

使用

在了解了Date 对象的这些方法后,接下来试着解决一下实际问题。

  1. 格式化时间输出

    • 输出成12小时制 YYYY-MM-DD hh:mm:ss 格式

      let today = new Date();//这里取了当前时间,可以是其他方式获取到的Date对象
      let option = {year:'numeric', month:'2-digit',day:'2-digit', hour:'2-digit',minute:'2-digit',second:'2-digit'};
      let data_str = today.toLocaleString('zh-CN',option);
      console.log(data_str);//2021/09/09 上午08:52:36
      ​
      let result = data_str.replace(/\//g,"-");//将分隔符'/'替换成'-'
      console.log(result);//2021-09-09 上午08:52:36
      ​

    • 输出成24小时制 YYYY-MM-DD HH:mm:ss 格式

      要达到这个目的,其实只需要在前面的例子上稍加改动即可,主要是在option里边将默认的12小时制改成24小时制即可。

      let today = new Date();//这里取了当前时间,可以是其他方式获取到的Date对象
      let option = {year:'numeric', month:'2-digit',day:'2-digit', hour:'2-digit',minute:'2-digit',second:'2-digit',hour12:false}; //注意这里hour12 要给布尔值,而不是字符串'false'
      let data_str = today.toLocaleString('zh-CN',option);
      console.log(data_str);//2021/09/09 08:52:36
      ​
      let result = data_str.replace(/\//g,"-");//将分隔符'/'替换成'-'
      console.log(result);//2021-09-09 08:52:36
      ​

    • 输出成 xxxx年xx月xx日的格式

      let today = new Date();//这里取了当前时间,可以是其他方式获取到的Date对象
      let option = {year:'numeric', month:'long',day:'numeric'};
      let result = today.toLocaleDateString('zh-CN',option);
      console.log(result);//2021年9月9日
    • 带星期的输出

      如果需要将星期几也带入到输出的日期字符串中,那么需要将weekday 选项加入到option中。

      //假设需要输出的日期格式是 xxxx年xx月xx日星期x
      let today = new Date();//这里取了当前时间,可以是其他方式获取到的Date对象
      let option = {year:'numeric', month:'long',day:'numeric',weekday:'long'};
      let result = today.toLocaleDateString('zh-CN',option);
      console.log(result);//2021年9月9日星期四
      ​
      //如果要显示的是周x而不是星期x,那么可以通过下面的方式
      option = {year:'numeric', month:'long',day:'numeric',weekday:'short'};
      result = today.toLocaleDateString('zh-CN',option);
      console.log(result);//2021年9月9日周四

    • 时区相关的输出

      来看这么个需求,当需要在输出的日期字符串中带上当前的时区,可以考虑用下面的方式。

      let today = new Date();//这里取了当前时间,可以是其他方式获取到的Date对象
      //显示时区的完整名称信息用 timeZoneName:'long'
      let option = {year:'numeric', month:'2-digit',day:'2-digit', hour:'2-digit',minute:'2-digit',second:'2-digit',hour12:false,timeZoneName:'long'}; 
      let data_str = today.toLocaleString('zh-CN',option);
      console.log(data_str);//2021/09/09 中国标准时间 08:42:56
      ​
      let result = data_str.replace(/\//g,"-");//将分隔符'/'替换成'-'
      console.log(result);//2021-09-09 中国标准时间 08:42:56
      ​
      //显示时区的简短名称信息用 timeZoneName:'short'
      option.timeZoneName = 'short';
      data_str = today.toLocaleString('zh-CN',option);
      console.log(data_str);//2021/09/09 GMT+8 08:42:56
      ​
      result = data_str.replace(/\//g,"-");//将分隔符'/'替换成'-'
      console.log(result);//2021-09-09 GMT+8 08:42:56

      那如果,需要将当前的时间转换成另外一个时区的时间输出改怎么办呢?option 参数里边提供了 timeZone 选项,它可以帮助完成这个需求。

      //本例中将当地时间(即北京时间)改成美国洛杉矶时间
      let option = {year:'numeric', month:'2-digit',day:'2-digit', hour:'2-digit',minute:'2-digit',second:'2-digit',hour12:false,timeZoneName:'long',timeZone:'America/Los_Angeles'}; 
      let data_str = today.toLocaleString('zh-CN',option);
      console.log(data_str);//2021/09/08 北美太平洋夏令时间 17:42:56
  2. 获取农历日期

        那么如何获取某个日期的农历呢?option 的 calendar 选项可以解决这个需求。

   
let today = new Date();//这里取了当前时间,可以是其他方式获取到的Date对象
let option = {year:'numeric', month:'numeric',day:'numeric',calendar:'chinese'}; 
let result = today.toLocaleString('zh-CN',option);
console.log(data_str);//2021年八月3

总结

  1. 在使用Date 对象的 这几个locale 相关的方法的时候一定要注意一下浏览器兼容性。具体见这个链接

  2. 在调用toLocalexxx方法时只返回option参数中的给定项,因此可以比较灵活的组织各个项目。

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tonyzhangcn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值