次の文字列を MM/DD/YYYY の JavaScript 日付文字列形式に変換する最良の方法は何ですか?
"25-AUG-11"
最良の方法は、質問へのコメントで jmeans によって与えられたものです。
ある形式の日付を表す文字列が与えられた場合、それを別の形式に変換する「最良の方法」は、最初にそれを日付に解析してから、日付を必要な文字列にフォーマットすることです。
これが 1 回限りの変換でない限り、日付をフォーマットして解析するコードを書くのに時間を無駄にしないでください! これは、十分にテストされた多くのライブラリによって実装されている解決済みの問題です。日付の処理や計算を行う場合、自分で行うとエラーが発生しやすくなります。
優れた軽量の日付ライブラリの 1 つに moment.js があります。
次のように moment.js を含めます。
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js"></script>
次に、特定の例の JavaScript コードは次のようになります。
alert(moment("25-AUG-11", "DD-MMM-YY").format("MM/DD/YYYY"));
注: 入力文字列に "AUG" が含まれていたため、コンピューターのロケールで英語が使用されていない場合は、英語を使用して "MMM" 部分を解析するようにライブラリに指示する必要がある場合があります。
いつの日か、私たちは皆 ISO-8601 を話すようになるでしょう。#暴言:)
Date オブジェクト メソッドを使用できます: ToISOString() これは、ISO 規格に従って日付を文字列に変換します または :::toLocaleDateString() を使用します
次のようなものを使用できます。
var months={
"JAN":1,
"FEB":2,
//... other months
"DEC":12
}
var r=/(\d{1,2})\-(\w+)?\-(\d{1,2})/;
var replaceFunction=function(){
var years=parseInt(arguments[3],10);
var m=months[arguments[2]];
var days=arguments[1]
if(m<9){
m="0"+m;
}
if(days.length===1){
days="0"+days;
}
if(years>50){
years="19"+years;
}else{
years="20"+years;
}
return m+"/"+days+"/"+years;
};
console.log("5-JAN-14".replace(r,replaceFunction));
console.log("25-FEB-98".replace(r,replaceFunction));
この JavaScript 関数を使用して、それを実現できます。
function formatDate(dateparam) {
var dateObj = new Date(Date.parse(dateparam));
var date = dateObj.getDate();
date = (date.toString().length == 1) ? "0" + date : date;
var month = dateObj.getMonth() + 1;
month = (month.toString().length == 1) ? "0" + month : month;
var year = dateObj.getFullYear();
return month + "/" + date + "/" + year;
}
document.write(formatDate("25-AUG-11"));
//returns "08/25/2011"
「最高」は相対的なものであり、基準を提供していません。単純な文字列操作を使用する 1 つの方法を次に示します。
function reFormatDateString(s) {
s = s.split('-');
var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06',
jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'};
return months[s[1].toLowerCase()] + '/' + s[0] + '/' + s[2];
}
alert(reFormatDateString('25-AUG-11')); // 08/25/2011
ただし、2 桁の年をより具体的に扱いたい場合があります。
// The format "MM/DD/YYYY" isn't a "javascript" format, it's a US format.
function reFormatDateString1(s) {
s = s.split('-');
var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06',
jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'};
var m = +s[2];
s[2] = m < 100? (m < 50? m + 2000 : m + 1900) : m;
return months[s[1].toLowerCase()] + '/' + s[0] + '/' + s[2];
}
日付オブジェクトを使用する別のバージョンを次に示します。
function reFormatDateString2(s) {
s = s.split('-');
var months = {jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
jul:6, aug:7, sep:8, oct:9, nov:10, dec:11};
function z(n){return (n<10? '0' : '') + n;}
// Convert 2 digit year. If < 50, assume 21st century,
// otherwise assume 20th.
// Adjust range to suit
if (s[2].length == 2) {
if (s[2] < 50 ) {
s[2] = +s[2] + 2000;
} else {
s[2] = +s[2] + 1900;
}
}
var d = new Date(s[2], months[s[1].toLowerCase()], s[0]);
return z(d.getMonth() + 1) + '/' + z(d.getMonth()+1) + '/' + z(d.getFullYear());
}
あなたは「最高」を選びます。