4

我正在尝试将 MM/DD/YYYY 日期转换为长日期。因此,例如,02/12/2013将转换为类似Tuesday February 12 2013.

我查看了 MomentJS 和其他 JS 方法,但没有真正做到我想要的。或者至少,我不这么认为。

有没有办法准确地进行这个日期转换?

4

8 回答 8

5

如果您不想要任何其他可以使用的脚本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

于 2016-09-14T16:17:24.330 回答
4

使用 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>

于 2016-09-14T16:29:04.313 回答
4

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

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>

于 2017-12-12T09:31:08.017 回答
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>

于 2016-09-14T16:08:24.200 回答
2

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

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

解析是手动进行的,Date.parse

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

Date.UTC用于提供partsIntl.DateTimeFormat #format的日期。

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

最后,,en-US格式化字符串中删除 's,使其符合您的要求。

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

于 2016-09-14T16:32:38.120 回答
1

你可以使用普通的 Javascript Date 方法来做类似的事情:

var date  = new Date("01/01/2000")
date.toDateString()   //"Sat Jan 01 2000"
于 2016-09-14T16:08:56.203 回答
0

完整的:

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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

于 2016-09-14T16:17:02.933 回答
-1

使用时刻,

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

在momentJS 的主页上,您可以看到所有可能的日期格式列表(http://momentjs.com/)。

Do在日期中添加“nth”,使其D仅显示数字,但是由于您全部用文字书写,因此最好使用“nth”

于 2016-09-14T16:08:45.893 回答