如何将字符串转换为JavaScript日期对象?
var st = "date in some format"
var dt = new Date();
var dt_st = // st in Date format, same as dt.
如何将字符串转换为JavaScript日期对象?
var st = "date in some format"
var dt = new Date();
var dt_st = // st in Date format, same as dt.
当前回答
只是新日期(st);
假设这是正确的格式。
其他回答
在我看来,这是最好、最简单的解决方案:
只需将日期字符串(使用ISO格式)与“T00:00:00”连接在一起,并使用JavaScript date()构造函数,如下例所示。
const dateString = '2014-04-03'
var mydate = new Date(dateString + "T00:00:00");
console.log(mydate.toDateString());
还有上面解决方案的一些细节(可选阅读):
In ISO format, if you provide time and Z is not present in the end of string, the date will be local time zone instead of UTC time zone. That means, when setting a date in this way, without specifying the time zone, JavaScript will use the local browser's time zone. And when getting a date, without specifying the time zone as well, the result is also converted to the browser's time zone. And, by default, almost every date method in JavaScript (except one) gives you a date/time in local time zone as well (you only get UTC if you specify UTC). So, using in local/browser time zone you probably won't get unwanted results because difference between your local/browse time zone and the UTC time zone, which is one of the main complaints with date string conversion. But if you will use this solution, understand your context and be aware of what you are doing. And also be careful that omitting T or Z in a date-time string can give different results in different browsers.
值得注意的是,上面的例子会给你和下面这个例子完全一样的回报,这是这个问题中投票第二多的答案:
var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]);
console.log(mydate.toDateString());
主要的区别是,这里提供的第一个示例比第二个示例更简单,甚至更防错误(至少在我看来,如下所述)。
因为如果你调用JavaScript Date()构造函数时只带一个ISO格式的日期字符串参数(第一个例子),它就不接受超出其逻辑限制的值(因此,如果你把13作为月或32作为日,你就会得到无效日期)。
但是,当您使用具有多个日期参数的相同构造函数时(第二个示例),高于其逻辑限制的参数将被调整为相邻值,并且您不会得到无效日期错误(因此,如果您给出13作为月份,它将调整为1,而不是给出无效日期)。
或者另一种(也是第三种)解决方案将两者混合使用,使用第一个示例只是验证日期字符串,如果它是有效的,则使用第二个示例(这样可以避免第一个示例可能的浏览器不一致,同时避免参数的权限高于第二个示例的逻辑限制)。
就像这样(也接受部分日期):
function covertStringToDate(dateString) {
//dateString should be in ISO format: "yyyy-mm-dd", "yyyy-mm" or "yyyy"
if(new Date(dateString).toString() === "Invalid Date") {
return false
} else {
const onlyNumbers = dateString.replace(/\D/g, "");
const year = onlyNumbers.slice(0,4)
const month = onlyNumbers.slice(4,6)
const day = onlyNumbers.slice(6,8)
if(!month){
return(new Date(year))
} else if (!day) {
return(new Date(year, month - 1))
} else {
return(new Date(year, month - 1, day))
}
}
}
第四种选择(也是最后一个建议)是使用适当的第三个库(如moment或date-fns)
引用:
https://www.w3schools.com/js/js_date_formats.asp https://css-tricks.com/everything-you-need-to-know-about-date-in-javascript/ https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Date#parameters
使用此格式....
//get current date in javascript
var currentDate = new Date();
// for getting a date from a textbox as string format
var newDate=document.getElementById("<%=textBox1.ClientID%>").value;
// convert this date to date time
var MyDate = new Date(newDate);
你可以试试这个:
function formatDate(userDOB) { const dob = new Date(userDOB); const monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; const day = dob.getDate(); const monthIndex = dob.getMonth(); const year = dob.getFullYear(); // return day + ' ' + monthNames[monthIndex] + ' ' + year; return `${day} ${monthNames[monthIndex]} ${year}`; } console.log(formatDate('1982-08-10'));
作为这里所解释的内容的一个插件,您可以使用new Date()创建日期,并使用非常有用的toLocaleDateString()函数对其进行格式化
一个例子:
console.log(new Date('1970-01-01').toLocaleDateString('es-ES')) //——>输出'1/1/1970'
性能
今天(2020.05.08),我对所选解决方案进行了测试-有两种情况:输入日期是ISO8601字符串(Ad,Bd,Cd,Dd,Ed),输入日期是时间戳(At, Ct, Dt)。解决方案Bd,Cd,Ct不返回js Date对象作为结果,但我添加它们,因为它们可能是有用的,但我没有将它们与有效的解决方案进行比较。该结果对于大量数据解析非常有用。
结论
解决方案new Date (Ad)比moment.js (Dd)快50-100倍,适用于所有浏览器的ISO日期和时间戳 解决方案new Date (Ad)比parseDate (Ed)快10倍 解决方案date .parse(Bd)是最快的,如果我们需要在所有浏览器上从ISO日期获得时间戳
细节
我在MacOs High Sierra 10.13.6、Chrome 81.0、Safari 13.1、Firefox 75.0上进行测试。解决方案parseDate (Ed)使用新的Date(0)和手动设置UTC日期组件。
let ds = '2020-05-14T00:00Z'; // Valid ISO8601 UTC date let ts = +'1589328000000'; // timestamp let Ad = new Date(ds); let Bd = Date.parse(ds); let Cd = moment(ds); let Dd = moment(ds).toDate(); let Ed = parseDate(ds); let At = new Date(ts); let Ct = moment(ts); let Dt = moment(ts).toDate(); log = (n,d) => console.log(`${n}: ${+d} ${d}`); console.log('from date string:', ds) log('Ad', Ad); log('Bd', Bd); log('Cd', Cd); log('Dd', Dd); log('Ed', Ed); console.log('from timestamp:', ts) log('At', At); log('Ct', Ct); log('Dt', Dt); function parseDate(dateStr) { let [year,month,day] = dateStr.split(' ')[0].split('-'); let d=new Date(0); d.setUTCFullYear(year); d.setUTCMonth(month-1); d.setUTCDate(day) return d; } <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment-with-locales.min.js"></script> This snippet only presents used soultions
铬检测结果