将MM/DD/YYYY日期转换为月份 日 年份

6

我想把一个 MM/DD/YYYY 的日期转换成长日期,例如:02/12/2013 转换成 Tuesday February 12 2013

我查看了 MomentJS 和其他的 JS 方法,但是没有找到我想要的。或者至少,我认为没有。

有没有一种方法可以准确地进行这个日期转换呢?


你想使用 moment.js 还是只想用纯 JavaScript? - Mohammad
1
类似于还是准确地? - Xotic750
8个回答

8
使用moment.js,您可以像使用JavaScript Date对象一样执行以下操作

var date = new Date(2013, 1, 12);
console.log(moment(date).format('dddd MMMM D Y'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

如果你想把一个日期字符串转换成长日期格式的字符串,你可以像这样做。

var longDateStr = moment('02/12/2013', 'M/D/Y').format('dddd MMMM D Y');
console.log(longDateStr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>


真的帮了很多...谢谢 - Dibish

7

如果您不想使用其他脚本,可以使用Date和一些数组。

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var now = new Date('02/12/2013');
console.log(days[now.getDay()] + ' ' + months[now.getMonth()] + ' ' + now.getDate() + ' ' + now.getFullYear()); //Tuesday February 12 2013


5
我认为有一些简单的方法可以做到这一点。

function getData() {
  var d = new Date("02/12/2013");
  var options = {
    weekday: 'long',
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  };
  var n = d.toLocaleDateString('en-US', options);
  var t = d.toLocaleTimeString('en-GB')
  var replase = n.replace(new RegExp(',', 'g'), ' ')
  document.getElementById("demo").innerHTML = replase
}
getData()
<span id="demo"></span>


3
使用moment.js非常简单:

console.log(moment('02/12/2013', 'MM/DD/YYYY').format('dddd MMMM D Y'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>


2
在现代浏览器上,您可以使用Intl API

Intl对象是ECMAScript国际化API的命名空间,提供语言敏感的字符串比较、数字格式化以及日期和时间格式化。Collator、NumberFormat和DateTimeFormat对象的构造函数是Intl对象的属性。

解析需要手动完成,Date.parse

不建议使用Date.parse,因为在ES5之前,字符串的解析完全依赖于实现。不同主机解析日期字符串的方式仍然存在许多差异,因此日期字符串应该手动解析(如果需要适应多种不同的格式,则可以使用库来帮助)。

Date.UTC” 用于为 Intl.DateTimeFormat#format 提供来自“parts”的日期。

“Date.UTC()”方法接受与构造函数的最长形式相同的参数,并返回自1970年1月1日00:00:00以来,世界协调时间中的毫秒数。

最后,从“en-US”格式化字符串中移除“,”,以使其符合你的要求。

const parts = '02/12/2013'.split('/');
parts.unshift(parts.pop());
parts[1] -= 1;
const dateString = new Intl.DateTimeFormat('en-US', {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  timeZone: 'UTC'
}).format(Date.UTC(...parts)).replace(/,/g, '');
console.log(dateString);


并不是所有的当前浏览器(移动端支持尤其差)都支持Intl对象,也有许多当前使用的浏览器不支持。 - RobG
除了Safari浏览器,所有主要的浏览器都支持它的基本实现,至于移动设备,我不太清楚,但是像ES5、ES6和ES7一样,有一个shim/polyfill来支持它,但我从未测试过。https://github.com/andyearnshaw/Intl.js/就像所有东西一样,支持会越来越好。我不知道转译器是否支持它。 - Xotic750

2
你可以使用纯JavaScript的Date方法来实现类似的功能:
var date  = new Date("01/01/2000")
date.toDateString()   //"Sat Jan 01 2000"

1
OP并不是在寻求“类似的东西”。 - Michał Perłakowski
1
"...所以举个例子,02/12/2013会转换成类似于星期二二月12日2013年的格式。另外,使用String.replace()函数可以快速修复格式,无需使用外部库。" - StackOverMySoul
不建议使用Date构造函数(或Date.parse)解析字符串,因为它在很大程度上依赖于实现,并且不可靠。 - RobG

0

FullJS:

function mydate(date)
{
  var
    month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    days  = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
  ;
  return days[date.getDay()]+' '+month[date.getMonth()]+' '+date.getDate()+' '+date.getFullYear()
}

console.log(mydate(new Date()));

参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date


-1

使用 moment 库,

moment().format('dddd MMMM Do YYYY');

在momentJS的主页上,您可以看到所有可能的日期格式列表(http://momentjs.com/)。 Do会将“nth”添加到日期中,将其更改为D仅显示数字,但由于您正在编写所有单词,最好使用“nth”。

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