检索日期格式并在PHP中根据需要进行解析

时间:2017-12-13 08:39:07

标签: php jquery datetime

我从数据库中检索日期并以意大利格式回显到屏幕时创建了这个函数:

function get_data_ita($date) {
    if ($date == "")
        return "";

    $d = new DateTime($date);
    return $d->format('d/m/Y');
}

其中$date是mysql格式,如:2017-12-31 14:00:00

现在,如果我传递正确的格式,例如:2017-12-31 14:00:00,则该功能可以正常工作。 但有时我需要使用SAME函数,传递已经格式化的日期,如:30/12/2017。在这种情况下,我当然会得到解析错误。

如何检查传递的日期是否已经是意大利语格式,如果是,则返回未触及的日期,如果没有,则解析日期? 我需要一个像:

这样的函数
function get_data_ita($date) {
    if ( $date== ALREADY_IN_ITALIAN_FORMAT )
       return $date;

    if ($date == "")
        return "";

    $d = new DateTime($date);
    return $d->format('d/m/Y');
}

echo get_data_ita("30/12/2017");
echo get_data_ita("2017-12-31 14:00:00");

ECHO:

30/12/2017
31/12/2017

更新:我自己找到了解决方案:

function validateDate($date, $format = 'Y-m-d')
{
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

function get_data_ita($datetime_db) {

    if ( validateDate($datetime_db, 'd/m/Y') ) {
        return $datetime_db;
    }

    if ($datetime_db == "")
        return "";

    $date = new DateTime($datetime_db);
    return $date->format('d/m/Y');

}

2 个答案:

答案 0 :(得分:0)

/替换为-

<?php

function get_data_ita($date) {
    if ($date == ""){
        return "";
    }
    $date = str_replace('/','-',$date);

    $d = new DateTime($date);
    return $d->format('d/m/Y');

}

echo get_data_ita("30/12/2017");
echo "\n";
echo get_data_ita("2017-12-31 14:00:00");

?>

检查演示:https://eval.in/918149

答案 1 :(得分:0)

如果日期不是有效的日期格式,则Strtotime返回false。

这适用于您的输入,但如果有其他日期格式则不适用。

import React from "react";
import {View, TouchableOpacity, Text} from "react-native";
import * as t from "tcomb-form-native";

let Form = t.form.Form;

export default class CreateUser extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            person: {}
        };

        this.samePassword = t.refinement(t.String, (s) => {
            return s == this.state.person.user_password;
        })
        this.Person = t.struct({
            user_id:          t.String,
            user_password:    t.String,
            reenter_password: this.samePassword,
        });
        this.options = {
            fields: {
                user_password: {
                    password: true,
                    secureTextEntry: true,
                    error: "",
                },
                reenter_password: {
                    password: true,
                    secureTextEntry: true,
                    error: "different password",
                },
            }
        };
        this.validate = null;
    }
    onChange(person) {
        this.setState({ person });
        if(person.reenter_password != null && person.reenter_password != "") {
            this.validate = this.refs.form.getValue();
        }
    }


    render() {
        return (
            <View>
                <Form
                    ref="form"
                    type={this.Person}
                    value={this.state.person}
                    onChange={(v) => this.onChange(v)}
                    options={this.options}
                />
                <View>
                    <TouchableOpacity
                        style={{backgroundColor: this.validate ? "blue": "red"}}
                        activeOpacity={this.validate ? 0.5 : 1}
                        disabled={this.validate? false: true}
                        onPress={() => this.doNext()}>
                        <Text> NEXT MOVE </Text>
                    </TouchableOpacity>
                </View>
            </View>
        );
    }
}

https://3v4l.org/kt5Vg