繁体   English   中英

Javascript:将具有完整月份的字符串转换为日期对象

[英]Javascript: convert string with full month to date object

我有一个字符串变量"PublishDate" ,然后当我使用"PublishDate.value"检查该值时,它返回一个类似

"October 04, 2016 9:28 AM"

我需要将其转换为格式为"10/04/2016"的日期对象

我不确定如何在javascript中完成此操作:

var d = new Date("October 04, 2016 9:28 AM");
var date = d.getDate();
var month = d.getMonth();
var year = d.getFullYear();
var hours = d.getHours();
var min = d.getMinutes();   //10/04/2016
console.log(month+1+'/'+date+'/'+year);

使用几个月的数组来获取数值,然后根据需要解析它

 var months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; function pad(n) { return n<10?'0'+n:n } var PublishDate = { value : "October 04, 2016 9:28 AM" } var parts = PublishDate.value.split(/[\\s\\,\\:]+/); var year = +parts[2]; var month = months.indexOf(parts[0]); var day = +parts[1]; var date = new Date(year, month, day); // date object var str = pad(month+1) + '/' + pad(day) + '/' + year; // the string "10/04/2016" console.log(date); console.log(str); 
 .as-console-wrapper {top : 0} 

 // Example PublishDate result var PublishDate = { value: 'October 04, 2016 9:28 AM' }; // convert "date string" into "date object" var date = new Date(PublishDate.value); // build required "date string" var dateShort = (date.getMonth() +1) + '/' + date.getDate() + '/' + date.getFullYear(); // console log to show result console.log(dateShort); 

首先,使用Date构造函数将该String date转换为Date对象:

var d = new Date(PublishDate.value);

编辑:请始终考虑浏览器可能不支持您的格式的情况。 对于Firefox,MDN声明它将支持某些日期格式

该字符串应采用Date.parse()方法可识别的格式(符合IETF的RFC 2822时间戳以及ISO8601的版本)。

IE的MSDN Javascript参考也说:

它首先尝试使用ISO日期格式解析日期字符串。 如果日期字符串不是ISO格式,则JavaScript会尝试使用其他“ 其他日期格式”来解析日期

此外,考虑到MDN本身不鼓励使用构造函数或Date.parse()解析String日期,即使它适用于您的特定情况:

注意:由于浏览器的差异和不一致,强烈建议不要使用Date构造函数(和Date.parse,它们等效)来解析日期字符串。

如果您需要支持其他各种日期格式或各种浏览器,还可以考虑Momtent.js javascript库或使用RegEx自己解析,例如@RobG和@adeneo的答案。


然后,您需要提取所需的部分(月,日,年),并将它们以斜杠作为分隔符的字符串连接起来,例如@ user3254198的答案或@Steeve Pitis的答案:

d.getDate() + '/' 
    + (d.getMonth() + 1) + '/' 
    +  d.getFullYear()

请记住, PublishDate.value.getMonth()方法返回该月的从零开始的月数字表示形式,因此,如果要使用1-12的值,请为其添加+1

随时询问任何进一步的信息! 祝好运。

使用Date构造函数解析诸如“ October 04,2016 9:28 AM”之类的字符串完全依赖于实现,并且可能导致错误的日期或无效的日期,因此请使用解析器(有很多可用的解析器)或编写一个小文件。自己解析字符串。

但是,如果您只想重新格式化,则根本不需要解析为Date,只需重新格式化字符串即可。 例如

 /* Reformat a string like October 04, 2016 9:28 AM to m/d/y format ** @param {string} s - string in format MMMM DD, YYYY h:mm ap ** @returns {string} reformatted date in MM/DD/YYYY format */ function reformatDate(s) { var months = {jan:'01',feb:'02',mar:'03',apr:'04', may:'05',jun:'06', jul:'07',aug:'08',sep:'09',oct:'10',nov:'11',dec:'12'}; var b = s.match(/\\w+/g) || []; return months[b[0].toLowerCase().substr(0,3)] + '/' + b[1] + '/' + b[2]; } console.log(reformatDate('October 04, 2016 9:28 AM')); 

在SO上有很多类似的问题...下次尝试搜索。

var date = new Date(PublishDate.value);
console.log((date.getDate() + '/' + (date.getMonth() + 1) + '/' +  date.getFullYear());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM