将UTC日期转换为dd/mm/yyyy格式

4

在尝试将UTC日期格式转换为JavaScript中的dd/mm/yyyy格式时,我遇到了一些困难:

var launchDate = attributes["launch_date"];
if (isBuffering) {
         var date = new Date(launchDate);
         var d = new Date(date.toLocaleDateString());
         launchDate = ((d.getUTCMonth() + 1) + "/" + (d.getUTCDate() + 1) + "/" + (d.getUTCFullYear()));
 } 

我尝试了这个方法,但是它返回了一个无效的日期。所以我改成了这个:
var launchDate = attributes["launch_date"];
if (isBuffering) {
         var date = new Date(launchDate);
         var d = formatDate(new Date(date.toLocaleDateString()));
         launchDate = ((d.getUTCMonth() + 1) + "/" + (d.getUTCDate() + 1) + "/" + (d.getUTCFullYear()));
 }

然而,它仍然返回我无效的日期。我想知道是否有可能将“Fri May 31 2013 17:41:01 GMT+0200 (CEST)”这样的日期格式更改为“dd/mm/yyyy”?提前感谢。

JavaScript本身只能识别有限的日期格式。如果你需要一个特定的格式,而这个格式不在其中,你可能需要使用一些自定义对象来进行“内部”转换,以便将你需要的格式转换为JavaScript本身可以识别的格式。我之前也走过这条路,发现这样做可能会出乎意料地棘手和容易出错 :) - David W
4个回答

11
var d = new Date();
var n = d.toLocaleDateString();

这将在构建JS方法方面更加卓越!


7
function formatDate(d)
 {
  date = new Date(d)
  var dd = date.getDate(); 
  var mm = date.getMonth()+1;
  var yyyy = date.getFullYear(); 
  if(dd<10){dd='0'+dd} 
  if(mm<10){mm='0'+mm};
  return d = dd+'/'+mm+'/'+yyyy
}

但是getDate()不是获取当前日期吗?还是获取传递参数的日期? - user2531590
它在同一日期(例如3/27/2008)不起作用,但在5/26/2008可以工作。 - user2531590
@radia 如何在JavaScript中将“Month dd,yyyy”转换为“MM / dd / yyyy”? - dilipkumar1007

0

月份是从0开始计数的,但日期不是。您不需要将天数加1。

另外,您要让它格式化为MM/dd/yyyy,而不是dd/MM/yyyy。

解决方案:

    var launchDate = attributes["launch_date"];
    if (isBuffering) {
             var date = new Date(launchDate);
             var d = formatDate(new Date(date.toLocaleDateString()));
             launchDate = ((d.getUTCDate())+ "/" + (d.getUTCMonth() + 1) +  "/" + (d.getUTCFullYear()));
     }

尽管我交换了日期和月份,它仍然返回无效日期。 - user2531590
它返回了哪一行“无效日期”?你能否使用调试器告诉我们它在哪里说了这句话?你的launchdate可能被格式化错误,无法被new Date()解析。 - Nzall
我使用了浏览器的调试工具,它只告诉我日期无效,但实际上是有值传入的,只是一些原因导致toLocaleDateString()函数出现错误。 - user2531590
使用断点(IE中的红色球,Chrome中的灰色箭头)逐步执行代码,并将鼠标悬停在launchdate和date上,以查看它们是否被正确处理。我认为new Date()无法处理launchdate的格式。检查一下launchDate中有什么,然后再检查一下date中有什么。我认为问题出在那一行,你需要传递一个new Date()可以处理的日期。 - Nzall
当我将日期解析为Date时,它的格式是毫秒。但是当它到达toLocaleDateString()这一行时,它变成了无效日期。我相信问题出在那里。 - user2531590
啊,现在我明白了问题所在。你试图解析一个已经被解析并转换为字符串的日期。你可以直接在日期上进行getUTC...()调用,而无需将其转换为toLocaleDateString。toLocaleDateString()是如果你想根据用户浏览器的语言环境打印它。 - Nzall

0

试一下:

Date.parseExact(Your_Date, 'dd/MM/yyyy').toString('MM/dd/yyyy');

或者

Date.parseExact(Your_Date, 'MM/dd/yyyy').toString('dd/MM/yyyy');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接