JS 把 String 转成 new Date()型

本文介绍了一种在JavaScript中将Date对象转换为指定格式字符串的方法,并提供了详细的格式化选项示例,包括年、月、日、时、分、秒及毫秒等。

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

Date 转成 String

d.pattern("yyyy-MM-dd");

/**   
* 对Date的扩展,将 Date 转化为指定格式的String   
* 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符   
* 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)   
* eg:   
* (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
* (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04   
* (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04   
* (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04   
* (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18   
*/ 

Date.prototype.pattern=function(fmt) {
    var o = {
        "M+" : this.getMonth()+1, //月份     
        "d+" : this.getDate(), //日     
        "h+" : this.getHours()%12 == 0?12 : this.getHours()%12, //小时     
        "H+" : this.getHours(), //小时     
        "m+" : this.getMinutes(), //分     
        "s+" : this.getSeconds(), //秒     
        "q+" : Math.floor((this.getMonth()+3)/3), //季度     
        "S" : this.getMilliseconds() //毫秒     
    };
    var week = {
        "0" : "\u65e5",
        "1" : "\u4e00",
        "2" : "\u4e8c",
        "3" : "\u4e09",
        "4" : "\u56db",
        "5" : "\u4e94",
        "6" : "\u516d"
    };
    if(/(y+)/.test(fmt)){
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
    if(/(E+)/.test(fmt)){
        fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1)?(RegExp.$1.length>2?"\u661f\u671f":"\u5468"):"")+week[this.getDay()+""]);
    }
    for(var k in o){
        if(new RegExp("("+ k +")").test(fmt)){
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1)?(o[k]):(("00"+ o[k]).substr((""+ o[k]).length)));
        }
    }
    return fmt;
}

js内置的format方法

Date date = new Date();

date.setFullYear(2011, 3, 8);         //这里设置的是2011年4月8日

注意:表示月份的参数介于 0 到 11 之间。也就是说,如果希望把月设置为 4月,则参数应该是 3。

 

转载于:https://my.oschina.net/u/1474683/blog/690109

<think>我们正在处理的问题:将JavaScript中的时间字符串换为Date对象。 根据引用[1]和引用[2],我们可以知道有两种主要方法: 方法1:直接使用new Date(timeString),但这种方法存在浏览器兼容性问题。 方法2:通过解析字符串的各个部分,然后使用new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)来创建Date对象,这种方法更可靠。 引用[1]中给出了一个简单的替换方法,将日期字符串中的'-'替换为'/',然后使用new Date,例如: var new_date_str = '2017-07-07'.replace(/-/g, '/'); var newdate = new Date(new_date_str); 引用[2]则指出直接使用new Date解析字符串可能有问题,并提供了一个解析函数,该函数使用正则表达式将时间字符串分解为年、月、日、时、分、秒、毫秒等部分,然后使用这些部分创建Date对象。 因此,我们可以提供两种方法,并指出第二种方法更安全。 另外,引用[3]没有提供具体内容,我们忽略。 现在,我们按照用户要求生成回答,并注意以下几点: 1. 使用中文回答。 2. 回答结构清晰,逐步解决问题。 3. 在回答中引用的段落末尾添加引用标识。 4. 生成相关问题。 步骤: 1. 介绍直接使用new Date()的方法,并指出其潜在问题。 2. 介绍更可靠的手动解析方法,并给出示例代码。 3. 总结建议。 同时,生成相关问题。</think>### JavaScript 时间字符串 Date 对象 在 JavaScript 中将时间字符串换为 Date 对象主要有两种方法,下面详细说明操作步骤和注意事项: #### ✅ 方法一:直接换(简单场景) 1. **基本语法**: ```javascript const dateObj = new Date("时间字符串"); ``` 2. **兼容性处理**: - 将日期分隔符 `-` 统一替换为 `/`(避免浏览器差异) ```javascript const timeStr = "2023-07-15 14:30:00".replace(/-/g, '/'); const dateObj = new Date(timeStr); ``` 3. **示例**: ```javascript // 日期字符串换 const date = new Date("2023/07/15"); console.log(date); // Sat Jul 15 2023 00:00:00 GMT+0800 // 时间字符串换 const datetime = new Date("2023/07/15 14:30:45"); console.log(datetime); // Sat Jul 15 2023 14:30:45 GMT+0800 ``` > ⚠️ 注意:此方法在不同浏览器/OS中可能存在解析差异[^2]。 #### ✅ 方法二:手动解析(推荐,兼容性强) 1. **使用正则解析组件**: ```javascript function parseDate(str) { // 正则匹配年月日时分秒 const match = str.match(/^(\d{4})[-/]?(\d{1,2})[-/]?(\d{1,2})[ T]?(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?/); if (!match) return null; // 提取组件(月份需-1) const [_, year, month, day, hour=0, minute=0, second=0] = match; return new Date( parseInt(year), parseInt(month) - 1, // 月份从0开始 parseInt(day || 1), parseInt(hour), parseInt(minute), parseInt(second) ); } ``` 2. **使用示例**: ```javascript parseDate("2023-07-15"); // 年月日 parseDate("2023/07/15 14:30"); // 含时间 parseDate("20230715T143045"); // ISO格式 ``` #### 📌 关键注意事项 1. **时区问题**: - `YYYY-MM-DD` 格式会被解析为 **UTC 时间** - `YYYY/MM/DD` 格式会被解析为 **本地时间**[^2] 2. **无效日期处理**: ```javascript const date = new Date("无效字符串"); console.log(date.toString()); // "Invalid Date" console.log(isNaN(date)); // true ``` 3. **ISO 8601 格式**: ```javascript // 标准ISO格式可直接解析 new Date("2023-07-15T14:30:45+08:00"); ``` #### 💡 总结建议 - 简单场景用 `new Date(str.replace(/-/g, '/'))` - 生产环境建议用手动解析函数确保兼容性 - 重要系统优先使用 `moment.js` 或 `date-fns` 等库 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值