| 660 | | return strtotime( "{$y}-{$m}-{$d} {$time}" ); |
| | 681 | /** |
| | 682 | * Combines the EXIF GPSTimeStamp and GPSDateStamp into a DateTime object |
| | 683 | * |
| | 684 | * @param string $datestamp |
| | 685 | * @param array $timestamp |
| | 686 | * @return DateTimeImmutable|false False if not valid data |
| | 687 | */ |
| | 688 | function wp_exif_gpsdatetime( $datestamp, $timestamp ) { |
| | 689 | if ( ! is_array( $timestamp ) ) { |
| | 690 | return false; |
| | 691 | } |
| | 692 | return new DateTimeImmutable( |
| | 693 | sprintf( '%s %02d:%02d:%02d', $datestamp, (int) $timestamp[0], (int) $timestamp[1], (int) $timestamp[2] ), new DateTimeZone( 'UTC' ) ); |
| 816 | | if ( empty( $meta['created_timestamp'] ) && ! empty( $exif['DateTimeDigitized'] ) ) { |
| 817 | | $meta['created_timestamp'] = wp_exif_date2ts( $exif['DateTimeDigitized'] ); |
| | 849 | if ( empty( $meta['created_timestamp'] ) ) { |
| | 850 | $rawdate = null; |
| | 851 | $timezone = null; |
| | 852 | if ( ! empty( $exif['DateTimeOriginal'] ) ) { |
| | 853 | $rawdate = $exif['DateTimeOriginal']; |
| | 854 | if ( ! empty( $exif['UndefinedTag:0x9011'] ) ) { |
| | 855 | $timezone = new DateTimeZone( $exif['UndefinedTag:0x9011'] ); |
| | 856 | } |
| | 857 | } elseif ( ! empty( $exif['DateTimeDigitized'] ) ) { |
| | 858 | $rawdate = $exif['DateTimeDigitized']; |
| | 859 | if ( ! empty( $exif['UndefinedTag:0x9012'] ) ) { |
| | 860 | $timezone = new DateTimeZone( $exif['UndefinedTag:0x9012'] ); |
| | 861 | } |
| | 862 | } |
| | 863 | if ( ! $timezone && $rawdate ) { |
| | 864 | // Attempt to derive offset from the GPS Timestamp if set as this is set to UTC but may not reflect creation time |
| | 865 | if ( ! empty( $exif['GPSTimeStamp'] ) && ! empty( $exif['GPSDateStamp'] ) ) { |
| | 866 | $gps = wp_exif_gpsdatetime( $exif['GPSDateStamp'], $exif['GPSTimeStamp'] ); |
| | 867 | $offsetdatetime = wp_exif_datetime( $rawdate, '+0000' ); |
| | 868 | $seconds = $offsetdatetime->getTimestamp() - $gps->getTimestamp(); |
| | 869 | $timezone = new DateTimeZone( timezone_name_from_abbr( '', $seconds, 0 ) ); |
| | 870 | } else { |
| | 871 | // If no timezone can be found assume the site timezone |
| | 872 | $timezone = wp_timezone(); |
| | 873 | } |
| | 874 | } |
| | 875 | $datetime = wp_exif_datetime( $rawdate, $timezone ); |
| | 876 | |
| | 877 | // Store as a RFC3339 formatted timestring as this includes both date, time, and timezone |
| | 878 | $meta['created'] = $datetime->format( DATE_RFC3339 ); |
| | 879 | |
| | 880 | // For backcompat set the timestamp |
| | 881 | $meta['created_timestamp'] = $datetime->getTimestamp(); |