Làm cách nào tôi có thể chuyển đổi một chuỗi thành một đối tượng thời gian trong javascript bằng cách chỉ định một chuỗi định dạng?
Tôi đang tìm kiếm một cái gì đó như:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Làm cách nào tôi có thể chuyển đổi một chuỗi thành một đối tượng thời gian trong javascript bằng cách chỉ định một chuỗi định dạng?
Tôi đang tìm kiếm một cái gì đó như:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Câu trả lời:
Tôi nghĩ rằng điều này có thể giúp bạn: http://www.mattkruse.com/javascript/date/
Có một getDateFromFormat()chức năng mà bạn có thể điều chỉnh một chút để giải quyết vấn đề của mình.
Cập nhật: có phiên bản cập nhật của các mẫu có sẵn tại javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Sử dụng nếu chuỗi của bạn tương thích với . Nếu định dạng của bạn không tương thích (tôi nghĩ là vậy), bạn phải tự phân tích chuỗi (nên dễ dàng với các biểu thức thông thường) và tạo một đối tượng Ngày mới với các giá trị rõ ràng cho năm, tháng, ngày, giờ, phút và giây.new Date(dateString)Date.parse()
@Christoph Mentions sử dụng regex để giải quyết vấn đề. Đây là những gì tôi đang sử dụng:
var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2])-1, // Careful, month starts at 0!
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
Không có nghĩa là thông minh, chỉ cần cấu hình regex và new Date(blah)phù hợp với nhu cầu của bạn.
Chỉnh sửa: Có thể dễ hiểu hơn một chút trong ES6 bằng cách sử dụng hàm hủy:
let dateString = "2010-08-09 01:02:03"
, reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
, [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds);
Nhưng trong tất cả sự trung thực những ngày này tôi đạt được một cái gì đó như Khoảnh khắc
/gcờ, chỉ để đặt lastIndexthành 0sau đó? Chỉ không sử dụng một trận đấu toàn cầu.
/gsao / dán cẩu thả từ một dự án hiện có. lastindexđã được thêm vào bởi một biên tập viên (để chống lại \gtôi cho rằng?). Tôi sẽ loại bỏ chúng ngay bây giờ. Cảm ơn bạn đã chỉ ra rằng.
Không có thói quen định dạng ngày / giờ tinh vi tồn tại trong JavaScript.
Bạn sẽ phải sử dụng một thư viện bên ngoài cho đầu ra ngày được định dạng, "Định dạng ngày JavaScript" từ Flagrant Badassery trông rất hứa hẹn.
Đối với chuyển đổi đầu vào, một số đề xuất đã được thực hiện. :)
Hãy xem Moment.js . Đây là một thư viện hiện đại và mạnh mẽ bù cho các hàm Ngày tồi tệ của JavaScript (hoặc thiếu chúng).
Chỉ cần một câu trả lời được cập nhật ở đây, có một lib js tốt tại http://www.datejs.com/
Datejs là một thư viện Ngày JavaScript mã nguồn mở để phân tích, định dạng và xử lý.
var temp1 = "";
var temp2 = "";
var str1 = fd;
var str2 = td;
var dt1 = str1.substring(0,2);
var dt2 = str2.substring(0,2);
var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);
var yr1 = str1.substring(6,10);
var yr2 = str2.substring(6,10);
temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;
var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);
var date1 = new Date(cfd);
var date2 = new Date(ctd);
if(date1 > date2) {
alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}
Thư viện bên ngoài là một quá mức cần thiết để phân tích một hoặc hai ngày, vì vậy tôi đã thực hiện chức năng của riêng mình bằng các giải pháp của Oli's và Christoph . Ở Trung Âu, chúng tôi hiếm khi sử dụng mọi thứ ngoài định dạng của OP, vì vậy điều này là đủ cho các ứng dụng đơn giản được sử dụng ở đây.
function ParseDate(dateString) {
//dd.mm.yyyy, or dd.mm.yy
var dateArr = dateString.split(".");
if (dateArr.length == 1) {
return null; //wrong format
}
//parse time after the year - separated by space
var spacePos = dateArr[2].indexOf(" ");
if(spacePos > 1) {
var timeString = dateArr[2].substr(spacePos + 1);
var timeArr = timeString.split(":");
dateArr[2] = dateArr[2].substr(0, spacePos);
if (timeArr.length == 2) {
//minutes only
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
} else {
//including seconds
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
}
} else {
//gotcha at months - January is at 0, not 1 as one would expect
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
}
}
Date.parse() là khá thông minh nhưng tôi không thể đảm bảo rằng định dạng sẽ phân tích chính xác.
Nếu không, bạn sẽ phải tìm một cái gì đó để kết nối cả hai. Ví dụ của bạn khá đơn giản (hoàn toàn là số), do đó, việc chạm vào REGEX (hoặc thậm chí string.split()- có thể nhanh hơn) được ghép nối với một số parseInt()sẽ cho phép bạn nhanh chóng thực hiện một ngày.
time = "2017-01-18T17:02:09.000+05:30"
t = new Date(time)
hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);
t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec
Chỉ để cho tôi 5 xu.
Định dạng ngày của tôi là dd.mm.yyyy (định dạng của Vương quốc Anh) và không có ví dụ nào ở trên hoạt động với tôi. Tất cả các trình phân tích cú pháp đã xem xét mm là ngày và dd là tháng.
Tôi đã tìm thấy thư viện này: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ và nó đã hoạt động, bởi vì bạn có thể nói thứ tự của các trường như thế này:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
Tôi hy vọng điều đó sẽ giúp được ai đó.
Moment.js sẽ xử lý việc này:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Bạn có thể sử dụng thư viện Moment.js cho việc này. Tôi chỉ sử dụng để có được đầu ra theo thời gian cụ thể nhưng bạn có thể chọn loại định dạng bạn muốn chọn.
Tài liệu tham khảo:
1. thư viện khoảnh khắc: https://momentjs.com/
2. chức năng cụ thể thời gian và ngày: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
và bạn có thể gọi phương thức này như:
this.convertDate('2020-05-01T10:31:18.837Z');
Tôi hy vọng nó sẽ giúp. Thưởng thức mã hóa.
Để đáp ứng đầy đủ chuỗi chuyển đổi Date.parse sang định dạng dd-mm-YYYY như được chỉ định trong RFC822, nếu bạn sử dụng phân tích yyyy-mm-dd có thể mắc lỗi.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}