如何在javascript中将完整日期转换为短日期?

问题描述 投票:0回答:12

我有一个约会,比如 2010 年 1 月 9 日星期一

我现在想将其转换为

2010年1月9日 月/日/年

我尝试这样做

    var startDate = "Monday, January 9, 2010";
    var convertedStartDate = new Date(startDate);
    var month = convertedStartDate.getMonth() + 1
    var day = convertedStartDate.getDay();
    var year = convertedStartDate.getFullYear();
    var shortStartDate = month + "/" + day + "/" + year;

但是它一定认为日期的格式不同,因为日期返回 1 而不是 9。

javascript date formatting
12个回答
79
投票

给你:

(new Date()).toLocaleDateString('en-US');

就是这样!!

您可以在任何日期对象上使用它

假设..你有一个名为“currentDate”的对象

var currentDate = new Date(); //use your date here
currentDate.toLocaleDateString('en-US'); // "en-US" gives date in US Format - mm/dd/yy

(或)

如果您想要本地格式,那么

currentDate.toLocaleDateString(); // gives date in local Format

59
投票

内置

toLocaleDateString()
可以完成这项工作,但它会删除日期和月份的前导 0,因此我们会得到类似“1/9/1970”的内容,在我看来这并不完美。为了获得正确的格式
MM/DD/YYYY
,我们可以使用类似的东西:

new Date(dateString).toLocaleDateString('en-US', {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric',
})

替代方案:我们可以使用具有良好的

浏览器支持
Intl.DateTimeFormat获得类似的行为。与
toLocaleDateString()
类似,我们可以传递带有选项的对象:

const date = new Date('Dec 2, 2021') // Thu Dec 16 2021 15:49:39 GMT-0600
const options = {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric',
}
new Intl.DateTimeFormat('en-US', options).format(date) // '12/02/2021'

56
投票

getDay()
方法返回一个数字来指示一周中的哪一天(0 = 星期日,1 = 星期一,... 6 = 星期六)。使用
getDate()
返回一个月中的某一天的数字:

var day = convertedStartDate.getDate();

如果你愿意,你可以尝试在

Date
对象的原型中添加自定义格式函数:

Date.prototype.formatMMDDYYYY = function(){
    return (this.getMonth() + 1) + 
    "/" +  this.getDate() +
    "/" +  this.getFullYear();
}

完成此操作后,您可以在

formatMMDDYYY()
对象的 any 实例上调用
Date
。当然,这只是一个非常具体的示例,如果您确实需要它,您可以编写一个通用格式化函数,该函数将基于格式化字符串来执行此操作,有点像 java 的 SimpleDateeFormat (http://java.sun.com /j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

(切线:

Date
对象总是让我感到困惑...
getYear()
getFullYear()
getDate()
getDay()
getDate()
的范围从1..31开始,但
getMonth()
从0..11开始

乱七八糟,总要偷看一下。 http://www.w3schools.com/jsref/jsref_obj_date.asp


8
投票
var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)"); 
document.getElementById("demo").innerHTML = d.toLocaleDateString();

3
投票

date.toLocaleDateString('en-US')
效果很好。 以下是有关它的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString


3
投票

虽然这个问题很久以前就发布了,但正确的方法是:

Intl.DateTimeFormat("en").format(new Date())

无论如何,Intl(国际)对象有很多选项,您可以传递给 like 来强制使用两个数字等。 大家可以看一下这里


1
投票

我希望日期显示在 type='time' 字段中。

正常转换会跳过零,表单字段不显示值,并在控制台中发出错误,指出格式需要为 yyyy-mm-dd。

因此我添加了一个小声明(检查)?(true):(false)如下:

makeShortDate=(date)=>{
yy=date.getFullYear()
mm=date.getMonth()
dd=date.getDate()
shortDate=`${yy}-${(mm<10)?0:''}${mm+1}-${(dd<10)?0:''}${dd}`;
return shortDate;
}

0
投票

我认为这是访问 DD/MM/YYYY 格式日期的更短方法:

console.log(new Intl.DateTimeFormat(['ban', 'id']).format(new Date()));

即使您只能获得一天的一部分,例如“下午、早上、晚上等..”


0
投票

Intl.DateTimeFormat("en", {dateStyle:'short'}).format(new Date())

输出:

“9/5/24”

如果您也想要时间:


Intl.DateTimeFormat("en", {dateStyle:'short', timeStyle: 'short'}).format(new Date())

输出:

“24 年 9 月 5 日上午 10:09”

参考


-2
投票

我能够做到这一点:

var dateTest = new Date("04/04/2013");
dateTest.toLocaleString().substring(0,dateTest.toLocaleString().indexOf(' '))

04/04/2013 仅用于测试,替换为您的日期对象。


-2
投票

您可以使用我的 date-shortcode 包轻松完成此操作:

const dateShortcode = require('date-shortcode')

var startDate = 'Monday, January 9, 2010'
dateShortcode.parse('{M/D/YYYY}', startDate)
//=> '1/9/2010'

-10
投票

试试这个:

new Date().toLocaleFormat("%x");
© www.soinside.com 2019 - 2024. All rights reserved.