Một số cách Convert DateTime

Đang làm dự án Nhật, bình thường thì có nhiều cách convert Datetime phổ biến, nhưng đây là Task Import Data và đã có vấn đề khi mình convert DateTime theo ngày và giờ của Nhật.

Đầu vào mình có 2 định dạng:

DateTime: 2019年11月6日 14時16分12秒

Date: 1990年10月2日

Một số cách mình sẽ note tại đây để khi cần dùng thì mình lôi ra dùng luôn và các bạn mới có thể tham khảo:

Cách 1: Replace

private function _replaceDateTime($datetime,$time = false){
        if (empty($datetime)) return null;
        $cv = str_replace(array('年','月','日','時','分','秒'), array('-','-','',':',':',''), trim($datetime));
        if ($time == true) {
            return date('Y-m-d H:i:s', strtotime($cv));
        } else {
            return date('Y-m-d', strtotime($cv));
        }
    }

Hàm này quá dễ, đọc phát hiểu ngay nên mình không cần phải giải thích gì nữa.

Cách 2: Convert

Cách này dùng extension, các bạn nhớ là phải bật cái này trên server nhé:

;extension=php_intl.dll

Sau khi enable lên thì hàm này mới chạy được

private function _convertDateTime($datetime){
        if (empty($datetime)) return null;
        $formatter = new IntlDateFormatter(
            'ja_JP', 
            IntlDateFormatter::FULL,
            IntlDateFormatter::FULL, 
            'Asia/Tokyo', 
            IntlDateFormatter::GREGORIAN,
            'Gy年M月d日 H時m分s秒'
          );
          $ts = $formatter->parse($datetime);
          return date('Y-m-d H:i:s', $ts);
    }
    private function _convertDate($date){
        if (empty($date)) return null;
        $formatter = new IntlDateFormatter(
            'ja_JP', 
            IntlDateFormatter::FULL,
            IntlDateFormatter::FULL, 
            'Asia/Tokyo', 
            IntlDateFormatter::GREGORIAN,
            'Gy年M月d日'
          );
          $ts = $formatter->parse($date);
          return date('Y-m-d', $ts);
    }

Tại sao phải enable extension bên trên thì là do IntlDateFormatter cần phải sử dụng nó nhé.

Còn các đoạn sau thì cũng bình thường nên các bạn ngâm cứu thêm nhé 🙂

 

Leave a comment

Your email address will not be published. Required fields are marked *