在我运行的PHP站点中,users表有一个名为user_last_login的日期时间字段。
我不时注意到随机用户此字段的值为1969年12月31日,而其他数千名用户仍然存储了准确的日期。
以下PHP代码用于在登录时生成此值:
$user_last_login = strtotime($enrolled_user['user_last_login']);
$user_last_login = date( 'F j, Y | g:i a', $user_last_login );
可能导致此意外默认日期值的原因是什么?
编辑(显示代码):
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="Product")
public class Product implements Serializable{
@Id
@Column(name="productId")
@GeneratedValue
private Integer productId;
@Column(name="productName")
private String productName;
@Column(name="productPrice")
private int productPrice;
//---------------------------------------item mapped to category------------------------------------------//
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(
name="CategoryProduct",
joinColumns= @JoinColumn(name="productId")
)
private Category category;
//--------------------------------------------------------------------------------------------------------//
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getProductPrice() {
return productPrice;
}
public void setProductPrice(int productPrice) {
this.productPrice = productPrice;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
答案 0 :(得分:1)
如果将纪元(自纪元以来的秒数)转换为日期,通常会得到一个合理的值:
例如:
echo date('Y-m-d H:i:s', 1453266106); //2016-01-20 00:01:46
但是如果传入0,则会得到纪元的日期:
echo date('Y-m-d H:i:s', 0); // 1969-12-31 19:00:00
检查您的代码,了解您要更新user_last_login
的任何其他位置,并将第二个(整数)参数传递给date
答案 1 :(得分:1)
不再是 Wild Shot
date("Y-m-d H:i:s")
因此,您要以适当的MySQL日期时间格式存储日期。您的显示有时会显示
December 31, 1969
这意味着您显然 以不同的格式显示 。因此,用于转换该日期的代码存在问题。最有可能的问题是月份是先到还是先来。查看该代码,当您的代码占用一个月的日期时,您会看到发生了什么,这会导致错误,然后将打印日期默认为unix时代。
您还可以通过运行查询来查看所有存储的日期时间值来验证此假设,如果您始终使用date("Y-m-d H:i:s")
来存储日期,则 腐败绝对不可能 有时是随机的。
上次登录:从不;)就是答案。
答案 2 :(得分:-1)
看起来您的时间可能偶尔会无效。见Prevent PHP date() from defaulting to 12/31/1969。
您可以先尝试检查时间(如链接所示),然后再插入它以防止这种情况发生。但是你仍然需要弄清楚为什么它有时会无效。为此,您需要更好地了解时间的来源。