Javascript tương đương với strtotime () của php?


82

Trong PHP, bạn có thể dễ dàng chuyển đổi mô tả ngày giờ bằng văn bản bằng tiếng Anh thành ngày tháng thích hợp với strtotime().

Có điều gì tương tự trong Javascript không?


Để phân tích cú pháp từ định dạng dd.mm.yyyy, hãy kiểm tra stackoverflow.com/questions/1576753/…
Valentin Despa

Câu trả lời:


51

Tôi đã tìm thấy bài viết này và thử hướng dẫn. Về cơ bản, bạn có thể sử dụng hàm tạo ngày để phân tích cú pháp ngày, sau đó viết lấy giây từ getTime()phương thức

var d=new Date("October 13, 1975 11:13:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");

Điều này có hiệu quả không?


Có vẻ như tôi không làm việc ngày được định dạng ở định dạng dmY.
Valentin Despa

30
-1. Điều này chỉ bao gồm các ngày được định dạng RFC 822 hoặc ISO 8601, nhưng strtotime()hỗ trợ nhiều định dạng khác.
Ja͢ck

1
Điều này có thể xảy ra để đáp ứng trường hợp sử dụng của OP, nhưng nó là một câu trả lời sai về mặt kỹ thuật, không hợp lệ cho câu hỏi. Hãy xem (và vui lòng ủng hộ) câu trả lời của Westy92.
Nate Abele

67

Vâng, đúng vậy. Và nó được hỗ trợ trong tất cả các trình duyệt chính:

var ts = Date.parse("date string");

Sự khác biệt duy nhất là hàm này trả về mili giây thay vì giây, vì vậy bạn cần chia kết quả cho 1000.

Kiểm tra các định dạng hợp lệ JavaScript có thể phân tích cú pháp.


29
Không; công trình này rất khác so với php strtotime, không ai trong số những ví dụ về các công việc giấy tờ php, không phải là một trong những đơnstrtotime("now"); strtotime("10 September 2000"); strtotime("+1 day"); strtotime("+1 week"); strtotime("+1 week 2 days 4 hours 2 seconds"); strtotime("next Thursday"); strtotime("last Monday");
Ivan Castellanos

1
Cảm ơn @Arnaldo. Điều này đang làm việc cho tôi. Câu trả lời của bạn chấp nhận hơn "Djechelon của"
Adi

Điều này sẽ hiệu quả, nhưng nó không đáng tin cậy. Date.parse ('2020-06-06') sẽ trả về cùng một dấu thời gian như Date.parse ('6 tháng 6 năm 2020'), nhưng không. (1591401600000 so với 1591423200000)
Vincent

35

Kiểm tra cách triển khai strtotime () của PHP trong JavaScript này!

Tôi thấy rằng nó hoạt động giống hệt với PHP cho mọi thứ mà tôi đã ném vào nó.

Cập nhật: chức năng này theo phiên bản 1.0.2 không thể xử lý trường hợp này: '2007:07:20 20:52:45' (Lưu ý :dấu phân cách cho năm và tháng)

Cập nhật 2018:

Điều này hiện có sẵn dưới dạng một npmmô-đun ! Đơn giản npm install locutusvà sau đó trong nguồn của bạn:

var strtotime = require('locutus/php/datetime/strtotime');

3
Tôi thường không thích các câu trả lời chỉ là liên kết đến các thư viện, nhưng trong trường hợp này vì JavaScript không xử lý gần như các trường hợp điên rồ như strtotime nên đây là một câu trả lời tuyệt vời. Cảm ơn bạn!
Fusty

Bản phát hành mới nhất của Locutus (ngày 7 tháng 9 năm 2018 tại thời điểm này) không xử lý các chuỗi như '19:00 ngày hôm qua'.
nicolas

4

Tôi ghen tị với strtotime () trong php, nhưng tôi sử dụng moment của tôi trong javascript. Không ngọt ngào như từ php, nhưng thủ thuật cũng gọn gàng.

// first day of the month
var firstDayThisMonth = moment(firstDayThisMonth).startOf('month').toDate();

Quay trở lại và sử dụng dấu subtract()add()với endOf()startOf():

// last day of previous month
var yesterMonthLastDay = moment(yesterMonthLastDay).subtract(1,'months').endOf('month').toDate();

0

Hỗ trợ của trình duyệt để phân tích cú pháp chuỗi không nhất quán . Vì không có thông số kỹ thuật về định dạng nào nên được hỗ trợ, những gì hoạt động trong một số trình duyệt sẽ không hoạt động trong các trình duyệt khác.

Hãy thử Moment.js - nó cung cấp chức năng trình duyệt chéo để phân tích cú pháp ngày :

var timestamp = moment("2013-02-08 09:30:26.123");
console.log(timestamp.milliseconds()); // return timestamp in milliseconds
console.log(timestamp.second()); // return timestamp in seconds

Điều này không trả lời đầy đủ câu hỏi (và có điểm âm). Có cách nào để thu hồi tiền thưởng không?
Westy92

0

Có một số mô-đun cung cấp hành vi tương tự, nhưng không hoàn toàn giống như strtotime của PHP. Trong số một số lựa chọn thay thế, tôi thấy việc sử dụng ngày mang lại kết quả tốt nhất.


0

var strdate = new Date('Tue Feb 07 2017 12:51:48 GMT+0200 (Türkiye Standart Saati)');
var date = moment(strdate).format('DD.MM.YYYY');
$("#result").text(date); //07.02.2017
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>

<div id="result"></div>


Cảnh báo không dùng nữa: giá trị được cung cấp không ở định dạng ISO được công nhận. thời điểm xây dựng rơi trở lại jsDate() - sooo… giống như new Date(strdate)thực sự…
dối trá

0

Có thể bạn có thể khai thác một hàm mẫu như:

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}

let futureDate = strtotime(new Date(), {
    hours: 1, //Adding one hour
    minutes: 45 //Adding fourty five minutes
  });
document.body.innerHTML = futureDate;

`

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.