将日期格式从yyyy/mm/dd转换为dd/mm/yy的JavaScript函数

22

我正在尝试创建一个 JavaScript 函数,以将数据库中的日期格式 (yyyy-mm-dd) 提取出来,并将其显示在页面上的格式为 (dd/mm/yy)。

我将非常感激任何帮助。

谢谢。

附言:如果需要更多解释,请告诉我。


1
你怎么从数据库中获取日期? - Valentin Rocher
http://stackoverflow.com/search?q=convert+date - Upperstage
3
我能否请求保留原样?“yyyy-mm-dd”是一种非常易读的日期格式,“dd/mm/yy”则含糊不清且恐怖(这是英国还是美国的日期格式?是哪个世纪?我一眼无法判断)。 - bobince
@bobince:它取决于它在哪里使用的上下文。如果它是一个仅在单个国家或内部使用的Web应用程序,用户将知道常见的日期格式,并且看到他们没有预期的格式可能会更加困惑。 此外,yyyy-mm-dd 不是在用户界面中常用的格式,对于新手用户来说,仍可能导致歧义(是 yyyy-mm-dd 还是 yyyy-dd-mm?)。 - Tom van Enckevort
11个回答

24

如果你确信从服务器获取的日期是有效的,一个简单的 RegExp 可以帮助你更改格式:

function formatDate (input) {
  var datePart = input.match(/\d+/g),
  year = datePart[0].substring(2), // get only two digits
  month = datePart[1], day = datePart[2];

  return day+'/'+month+'/'+year;
}

formatDate ('2010/01/18'); // "18/01/10"

1
以防有人想显示完整的年份,即4位数字,请使用以下代码:year = datePart[0].substring(0,4)只是补充一下,因为这可能不是显而易见的。感谢您的答案! - Jonathan Coffey

24

用一行代码实现:

date.split("-").reverse().join("-");
// 2021-09-16 => 16-09-2021

23

假设您不介意函数的动态性,最简单的方法是:

function reformatDate(dateStr)
{
  var dArr = dateStr.split("-");  // ex input: "2010-01-18"
  return dArr[2]+ "/" +dArr[1]+ "/" +dArr[0].substring(2); //ex output: "18/01/10"
}

6
使用以下任一JavaScript函数将日期yyyy/mm/dd转换为dd/mm/yy之一: 类型1
function ChangeFormateDate(oldDate){
   var p = dateString.split(/\D/g)
   return [p[2],p[1],p[0] ].join("/")
}

类型 2

function ChangeFormateDate(oldDate)
{
   return oldDate.toString().split("/").reverse().join("/");
}

您可以通过以下方式调用这些函数:
ChangeFormateDate("2018/12/17") //"17/12/2018"

3

1
URL链接似乎已经过期。 - Jeff Mergler

2

您可能还想使用date.js:

http://www.datejs.com

为了使您的应用程序具有未来性,您可能希望返回UTC时间戳并使用JavaScript格式化。这将允许您支持不同国家的不同格式(例如,在美国,我们最熟悉的是DD-MM-YYYY)以及时区。


2

试试这个:

function convertDate(dateString){
  var p = dateString.split(/\D/g)
  return [p[2],p[1],p[0] ].join("-")
}

convertDate("2001-9-11")//"11-9-2001"

1

如果您确定始终会收到YYYY-MM-DD格式的日期,还可以使用解构和模板字符串。

const changeDateFormatTo = date => {
  const [yy, mm, dd] = date.split(/-/g);
  return `${dd}/${mm}/${yy}`;
};

const formattedDate = changeDateFormatTo("2019-08-14");
console.log(`Formatted date is: ${formattedDate}`);


0

这是一个简单的案例,但每个人都在使用字符串方法!这有点野蛮 :-)

Date对象已经为此设置好了,并且一旦你掌握了它,它将帮助你更进一步。你的日期没有时区,所以我建议你在输入和输出时都强制使用UTC。en-GB语言环境强制使用dd-mm格式,但你应该记住,英语用户在日期格式上分为两半,每半都会完全困惑对方的格式。你真的应该尝试让你的数字日期格式适应用户的偏好,特别是因为这很容易!

所以...

new Vue({
  el: '#vueRoot',
  data: {kennedy: '1963-11-22'},
  computed:{
    kennedyDdmm(){
      return new Date(this.kennedy + 'T00:00:00Z')
      .toLocaleDateString('en-GB',{timeZone:'UTC'})
    },
    kennedyAuto(){
      return new Date(this.kennedy + 'T00:00:00Z')
      .toLocaleDateString([],{timeZone:'UTC'})
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id='vueRoot'>
  <h1>in => {{kennedy}}</h1>
  <h1>dd-MM-yy => {{kennedyDdmm}}</h1>
  <h1>respect user prefs => {{kennedyAuto}}</h1>
</div>


0

使用toLocaleDateString是将任何日期格式转换为最佳方式:

const date: Date = new Date('2023-04-11');
return date.toLocaleDateString('en-US', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    timeZone: 'UTC'
})

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