Chuyển đồi thời gian sang giây
Mình đang dùng thư viện TimePicker của Antdesign. Mình muốn khi người dùng select thì trong giá trị đó chỉ lấy thời gian (HH:mm:ss) và sau đó quy đổi toàn bộ ra giây (s). Mọi người cho mình hỏi dùng phương thức nào của moment.js để convert được như vậy.
https://codesandbox.io/s/72yy447kk1
Ví dụ ở đây khi mình chọn : "00:02:15" --> mình muốn log ra kq là 135
(s) ạ.
Mình không biết có nhất thiết phải chuyển như vậy cho tính toán đúng hay không nữa, tại vì ở đây mình không chuyển và tính thì thấy kq bị sai.
https://codesandbox.io/s/happy-euclid-4lu68
Mọi người xem và giúp mình. Mình xin cám ơn !
2 CÂU TRẢ LỜI
Nếu không muốn dùng moment bạn có thể dùng cách đơn giản sau để tính toán.
Với điều kiện là time
phải có đúng định dạng ở trên h:m:i
:
const timeString = '00:02:15';
const timeRange = timeString.split(':');
let seconds = 0;
timeRange.forEach((value, weight) => seconds += parseInt(value) * Math.pow(60, 2 - weight));
console.log(seconds)
Update thêm: Lỗi hiển thị kết quả trong code demo của chủ thớt.
Cái time trong code của chủ thớt cần chia 1000 để chuyển về second. comment #bq5QOwJGJZD
Sau đó, là lỗi hiển thị. Chủ thớt cần khởi tạo ở
00:00:00
trước rồi set giây sau cho nó nếu không nó sẽ tính ngày, giờ, phút hiện tại. Sửa lại sẽ theo comment #aGK7gXzQMKj như này:
moment("00:00:00", "HH:mm:ss")
.set("second", trimTime)
.format("HH:mm:ss")
umk, trước m cũng có viết một hàm bằng tay để tính toán kiểu này, nhừn về sau lại suy nghĩ đằng nào cũng sử dụng thư viện momentjs
rồi thì cố gắng tận dụng được sức mạnh của nó để giảm bớt được code cho gọn.
Vì thế nên mình nghĩ mình sẽ dựa vào thư viên moment.js
để xử lý chỗ này.
Bạn có thế kiểm tra giúp mình ở comment
trên của mình, hàm tính toán của mình tại sao bị sai không ?
Tks bạn
@thanh_tuan Cái time của bạn đang tính toán trên milisecond thì phải. Sau khi tính toán xong bạn chia cho 1000 để chuyển về second.
Mình có chia kq cho 1000 rồi mà sao nó vẫn không được bạn ạ : https://codesandbox.io/s/happy-euclid-4lu68
@thanh_tuan Mình mới sửa lại giúp bạn rồi đấy, chia 1000 để lấy ra giây luôn. Chỗ hiển thị nó bị sai vì bạn tạo mới bằng monment(trimTime)
nó sẽ tính vào theo thời gian hiện tại. Bạn cần khởi tạo ở 00:00:00
trước rồi set giây sau cho nó như này:
trimTime &&
moment("00:00:00", "HH:mm:ss")
.set("second", trimTime)
.format("HH:mm:ss")
Trong moment.js, bạn có thể sử dụng:
diff(moment().startOf('day'), 'seconds')
để convert sang giây
Như trong code của bạn thì sẽ như sau:
function onChange(time, timeString) {
console.log(time.diff(moment().startOf('day'), 'seconds'));
}
Bạn ơi, mình vừa update câu hỏi, bạn xem hộ mình xem, trường hợp này có nhất thiết phải chuyển không và tại sao của mình tính đang bị sai nhỉ : https://codesandbox.io/s/happy-euclid-4lu68
@thanh_tuan bạn đang muốn tính thời gian endtime - starttime đúng k nhỉ :v
@phanlyhuynh
Đúng rồi, mình muốn tính như vậy và sau khi tính xong nó hiển thị theo Format HH:mm:ss
.
Bạn @huukimit đã giúp mình bên dưới rồi.
Tks bạn
@thanh_tuan ok bạn. bạn có thể tìm hiểu thêm phần duration của moment.js để xử lý cho phần này