Javascript:使用完整月份到日期对象转换字符串

时间:2016-10-04 15:38:04

标签: javascript string date

我有一个字符串变量"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);

5 个答案:

答案 0 :(得分:2)

使用几个月的数组来获取数值,然后只需解析它就可以了

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}

答案 1 :(得分:1)

// 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);

答案 2 :(得分:1)

首先,使用Date constructor

将该String日期转换为Date对象
var d = new Date(PublishDate.value);

编辑:始终考虑浏览器可能不支持您的格式的情况。对于Firefox,MDN声明它将支持certain date formats

  

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

IE's MSDN Javascript reference也说:

  

它首先尝试使用ISO Date Format解析日期字符串。如果   日期字符串不是ISO格式,JavaScript试图解析   使用其他Other Date Formats日期。

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

  

注意:使用Date构造函数解析日期字符串(和   Date.parse,它们是等效的)因为强烈气馁   浏览器差异和不一致。

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

然后,你需要提取你想要的部分(月,日,年)并将它们连接成一个字符串,斜杠作为分隔符,比如在@ user3254198的答案或@Steeve Pitis&#39; s回答:

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

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

随意进一步询问!祝你好运。

答案 3 :(得分:1)

使用Date构造函数解析类似“2016年10月4日上午9:28”的字符串完全取决于实现,可能导致日期或日期无效,因此要么使用解析器(有许多好的可用)或者自己编写一个小函数来解析字符串。

但是如果你只想重新格式化它,那么根本不需要解析为Date,只需重新格式化字符串即可。 E.g。

/* 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'));
                

答案 4 :(得分:0)

在SO上有很多这样的问题...尝试下次搜索一下。

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